发送从上下文菜单选择的项目到另一个活动
问题描述:
我做了一个ContextMenu
为ListView
,并且一切工作完美。但是,我无法弄清楚如何将所选项目发送到其他活动?发送从上下文菜单选择的项目到另一个活动
我看了很多教程,但没有找到解决方案。
每个项目表示两个字段(两个字符串(产品,价格)用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;
}
}
答
您可以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只需声明的VanzatorProduse
的ArrayList
并如下添加到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
希望它有帮助。
向另一个活动发送内容的最基本的方式是使用一个“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