发送从上下文菜单选择的项目到另一个活动

发送从上下文菜单选择的项目到另一个活动

问题描述:

我做了一个ContextMenuListView,并且一切工作完美。但是,我无法弄清楚如何将所选项目发送到其他活动?发送从上下文菜单选择的项目到另一个活动

我看了很多教程,但没有找到解决方案。

每个项目表示两个字段(两个字符串(产品,价格)用JSON字符串解析。

listViewProduse.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
    listViewProduse.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
      final int checkedCount = listViewProduse.getCheckedItemCount(); 
      mode.setTitle(checkedCount + " product selected"); 
     } 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      MenuInflater inflater = mode.getMenuInflater(); 
      inflater.inflate(R.menu.main_context, menu); 

      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
      switch (item.getItemId()){ 
       case R.id.add_id: 
        SparseBooleanArray selected = adapter.getSelectedIds(); 

        String copyText=""; 
        for (int i = (selected.size() - 1); i >= 0; i--){ 
         if (selected.valueAt(i)){ 
          VanzatorProduse selectedListItem = adapter.getItem(selected.keyAt(i));         
         } 
        } 
        mode.finish(); 
        return true; 
       default: 
        return false; 
      } 
     } 
+0

向另一个活动发送内容的最基本的方式是使用一个“Intent”,并将要发送的内容添加为“Extra”。请参阅https://stackoverflow.com/questions/6707900/pass-a-string-from-one-activity-to-another-activity-in-android或https://stackoverflow.com/questions/18146614/how-发送字符串从一个活动到另一个或更多... – deHaar

您可以VanzatorProduse实现以放入用于启动新的活动的意图Parcelable接口。如果你说的这个类既有产品和价格,一个可能的实现可能如下:

public class VanzatorProduse implements Parcelable { 
    private String product; 
    private double price; 

    public VanzatorProduse(String product, double price) { 
     this.product = product; 
     this.price = price; 
    } 

    protected VanzatorProduse(Parcel in) { 
     product = in.readString(); 
    } 

    public static final Creator<VanzatorProduse> CREATOR = new Creator<VanzatorProduse>() { 
     @Override 
     public VanzatorProduse createFromParcel(Parcel in) { 
      return new VanzatorProduse(in); 
     } 

     @Override 
     public VanzatorProduse[] newArray(int size) { 
      return new VanzatorProduse[size]; 
     } 
    }; 

    public String getProduct() { 
     return product; 
    } 

    public double getPrice() { 
     return price; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(product); 
     parcel.writeDouble(price); 
    } 
} 

然后在你的onActionItemClicked只需声明的VanzatorProduseArrayList并如下添加到Intent

ArrayList<VanzatorProduse> products = new ArrayList<>(); 
for (int i = (selected.size() - 1); i >= 0; i--) { 
    if (selected.valueAt(i)) { 
     VanzatorProduse selectedListItem = adapter.getItem(selected.keyAt(i));  
     products.add(selectedListItem);  
    } 
} 
Intent intent = new Intent(YourActivity.this, YourSecondActivity.class); 
intent.putParcelableArrayListExtra("your_key", products); 
startActivity(intent); 

最后,在你的第二个活动,您检索来自onCreate方法的值如下:

Intent intent = getIntent(); 
ArrayList<VanzatorProduse> products = intent.getParcelableArrayListExtra("your_key"); // same key used as before 

希望它有帮助。

+0

我怎么能显示它在一个列表视图至极我有第二个活动? – android

+0

如上所示,在第二个活动中,您已经可以访问ArrayList 。因此,唯一剩下的就是通过扩展BaseAdapter类为RecyclerView创建一个适配器,或者如果您的需求真的非常简单,您可以使用ArrayAdapter(并且重写VanzatorProduse上的toString以返回每个项目在列表显示)。 – fergaral