将所选项目从上下文菜单发送到另一个活动
Posted
技术标签:
【中文标题】将所选项目从上下文菜单发送到另一个活动【英文标题】:Send selected items from Context Menu to another Activity 【发布时间】:2018-03-22 20:19:07 【问题描述】:我为ListView
制作了一个ContextMenu
,一切正常。但是,我不知道如何将选定的项目发送到另一个活动?
看了很多教程,没有找到解决办法。
每个项目代表两列,两个字符串(产品、价格)用 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;
【问题讨论】:
向另一个 Activity 发送内容的最基本方法是使用Intent
并将要发送的内容添加为 Extra
。请参阅***.com/questions/6707900/…、***.com/questions/18146614/… 或更多...
【参考方案1】:
您可以使VanzatorProduse
实现Parcelable
接口,以便将其放入用于启动新活动的Intent 中。如果你说这个类既有产品又有价格,一种可能的实现方式如下:
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 上,您只需声明 ArrayList
的 VanzatorProduse
并将其添加到 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
希望对你有帮助。
【讨论】:
如何在第二个活动中的列表视图中显示它? 如上所示,在第二个活动中,您已经可以访问 ArrayList以上是关于将所选项目从上下文菜单发送到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章