Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将上下文菜单中的选定项目发送到其他活动_Java_Android_Listview_Android Activity_Android Contextmenu - Fatal编程技术网

Java 将上下文菜单中的选定项目发送到其他活动

Java 将上下文菜单中的选定项目发送到其他活动,java,android,listview,android-activity,android-contextmenu,Java,Android,Listview,Android Activity,Android Contextmenu,我为一个列表视图制作了一个上下文菜单,一切都很正常。但是,我不知道如何将所选项目发送到其他活动 我看过很多教程,但没有找到解决方案 每个项表示两列,其中两个字符串(产品、价格)由JSON字符串解析 listViewProduse.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listViewProduse.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeList

我为一个
列表视图制作了一个
上下文菜单
,一切都很正常。但是,我不知道如何将所选项目发送到其他活动

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

每个项表示两列,其中两个字符串(产品、价格)由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);
    }
}
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);
Intent intent = getIntent();
ArrayList<VanzatorProduse> products = intent.getParcelableArrayListExtra("your_key"); // same key used as before
最后,在第二个活动中,您从
onCreate
方法中检索值,如下所示:

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);
    }
}
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);
Intent intent = getIntent();
ArrayList<VanzatorProduse> products = intent.getParcelableArrayListExtra("your_key"); // same key used as before
Intent-Intent=getIntent();
ArrayList products=intent.getParcelableArrayListExtra(“您的密钥”);//与以前使用的键相同

希望能有所帮助。

向另一个活动发送内容的最基本方法是使用
Intent
并将要发送的内容添加为
额外的
。请参阅,或者更多…如何在第二个活动中的listview中显示它?如上所述,在第二个活动中,您已经可以访问ArrayList。因此,剩下的唯一一件事就是通过扩展BaseAdapter类为RecyclerView创建一个适配器,或者如果您的需求非常非常简单,您可以使用ArrayAdapter(并覆盖VanzatorProduse上的toString,以返回每个项在ListView中的文本)。