Android 使用Multi-select recyclerview将所选项目传递给其他活动
我试图做的是获取所选项目,然后使用工具栏将其传递给下一个活动的意图值。如何使工具栏菜单知道它试图获取的数据。请帮忙 适配器onBindViewHolder() 我的工具栏Android 使用Multi-select recyclerview将所选项目传递给其他活动,android,android-intent,android-recyclerview,multi-select,Android,Android Intent,Android Recyclerview,Multi Select,我试图做的是获取所选项目,然后使用工具栏将其传递给下一个活动的意图值。如何使工具栏菜单知道它试图获取的数据。请帮忙 适配器onBindViewHolder() 我的工具栏 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem arg0) {
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem arg0) {
switch (arg0.getItemId()) {
case R.id.save:
Intent intent = new Intent(getApplicationContext(), NextActivity.class);
startActivity(intent);
default:
return false;
}
}
});
您可以在适配器类中维护一个数据结构,以不断添加所选项目 我猜你的工具栏在你的活动或片段中,希望它有一个适配器的引用,该适配器可以访问这个数据结构,然后将它传递给用户 我会用斯巴雷。因此,在适配器中,执行如下操作 SparseArray itemsArray=新SparseArray() 在onBindViewHolder方法中
if(item.isSelect()) {
viewHolder.view.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary));
if (itemsArray.get(position) != item) {
itemsArray.put(position, item);
}} else {
viewHolder.view.setBackgroundResource(R.drawable.item_selector);
if (itemsArray.get(position) == item) {
itemsArray.put(position, item);
}}
现在,从活动或片段使用适配器引用访问itemsArray变量。在其上运行for循环,并将项目添加到arrayList中
arrayList可以在intent中设置为extra,并且可以在目标活动中从getSerializableExtra()方法中检索
另一方面,您可以使用position而不是viewHolder.position
从您的changeStatusListener获取项目列表,并将其作为捆绑值传递给您。对于错误的代码编辑,我的浏览器出现故障,因此我无法以正确的方式对其进行格式化。我正在使用serializable。顺便说一句,我得到的结果是com.project.sample.model。Items@43ds2aba. 这是为什么?您需要重写模型类中的toString()方法以获得正确的名称,您得到的是该类的原始哈希代码。
if(item.isSelect()) {
viewHolder.view.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary));
if (itemsArray.get(position) != item) {
itemsArray.put(position, item);
}} else {
viewHolder.view.setBackgroundResource(R.drawable.item_selector);
if (itemsArray.get(position) == item) {
itemsArray.put(position, item);
}}
public ArrayList<Item> getSelectedItems() {
ArrayList<Item> selectedItems = new ArrayList<>();
for( Item item : items ) {
if( item.isSelect() )
selectedItems.add(item);
}
return selectedItems;
}
> toolbar.setOnMenuItemClickListener(new
>
> Toolbar.OnMenuItemClickListener() {
> @Override
> public boolean onMenuItemClick(MenuItem arg0) {
> switch (arg0.getItemId()) {
> case R.id.save:
>
>
> Intent intent = new Intent(getApplicationContext(), NextActivity.class);
> intent.putSerializable("selectedItems", adapter.getSelectedItems()); // In case Item class is implementing
> serializable
> intent.putParcelableArrayListExtra("selectedItems",adapter.getSelectedItems()); // In
> case you are using parcelable in your Item class
> startActivity(intent);
>
> default:
> return false;
> }
> }
> });