Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Android 使用同一适配器类为sams活动上的2个RecyclerViews实现2个不同的onClick_Android_Android Recyclerview - Fatal编程技术网

Android 使用同一适配器类为sams活动上的2个RecyclerViews实现2个不同的onClick

Android 使用同一适配器类为sams活动上的2个RecyclerViews实现2个不同的onClick,android,android-recyclerview,Android,Android Recyclerview,我正在尝试为两个不同的RecyclerViews在同一活动上实现两个不同的onClick。 onClick会从一个Recyclerview中删除一个项目,反之亦然,如果在另一个Recyclerview上单击一个项目,它会将其添加回第一个Recyclerview 我不希望为每个回收器创建两个不同的适配器,而是希望能够为两个回收器视图使用相同的适配器类。 但我无法找到一种方法让适配器重新显示正在单击哪个RecyclerView来移动项目 包含2个RecyclerViews的活动: public cl

我正在尝试为两个不同的RecyclerViews在同一活动上实现两个不同的onClick。 onClick会从一个Recyclerview中删除一个项目,反之亦然,如果在另一个Recyclerview上单击一个项目,它会将其添加回第一个Recyclerview

我不希望为每个回收器创建两个不同的适配器,而是希望能够为两个回收器视图使用相同的适配器类。 但我无法找到一种方法让适配器重新显示正在单击哪个RecyclerView来移动项目

包含2个RecyclerViews的活动:

public class PackingList extends AppCompatActivity implements PackingListAdapter.deleteItemListener {

//initialise variables
private RecyclerView packingRecyclerView;
private PackingListAdapter packingListAdapter;
private RecyclerView shoppedRecyclerView;
private PackingListAdapter shoppedListAdapter;

TextView addItembox;


String[] fruitslist;

private LinkedList<String> mItemlist;
private LinkedList<String> mshoppedList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_packing_list);

    mItemlist = new LinkedList<>();
    mshoppedList = new LinkedList<>();



    //assign the recyclierview to the actual view on the layout
    packingRecyclerView = findViewById(R.id.packingList);
    shoppedRecyclerView = findViewById(R.id.completedItemsRecyclerView);

    //create an adapter and supply the data to be displayed
    packingListAdapter = new PackingListAdapter(this, mItemlist,this);
    shoppedListAdapter = new PackingListAdapter(this,mshoppedList,this);

    //connect the adapter with the recyclerview
    packingRecyclerView.setAdapter(packingListAdapter);
    shoppedRecyclerView.setAdapter(shoppedListAdapter);

    //give the recyclerview a defaultlayout manager
    packingRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    shoppedRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    initializeData();


}

private void initializeData() {

    Resources res = getResources();

    String[] fruits = res.getStringArray(R.array.Fruits);
    String[] vegetables = res.getStringArray(R.array.Vegetables);


    // pass the fruits list into the recyclerview itemlist
    for (int i = 0; i < fruits.length; i++) {
        mItemlist.add(fruits[i]);
    }

    for (int i = 0; i < vegetables.length; i++) {
        mItemlist.add(vegetables[i]);
    }


    packingListAdapter.notifyDataSetChanged();


}

public void addItem (View view) {

    addItembox = findViewById(R.id.add_item_textbox);
    String itemToAdd = addItembox.getText().toString();

    int itemListSize = mItemlist.size();

    //add a new item to the itemlist
    mItemlist.add(itemToAdd);

    addItembox.setText("");

    packingListAdapter.notifyDataSetChanged();
}



@Override
public void onItemClick(int position) {
    //mItemlist.get(position);


    if (mItemlist.get(position) == mItemlist.get(position)) {
        Toast.makeText(this, "item removed: " + mItemlist.get(position), Toast.LENGTH_SHORT).show();
        mshoppedList.add(mItemlist.get(position));

        mItemlist.remove(position);

        packingListAdapter.notifyDataSetChanged();
        shoppedListAdapter.notifyDataSetChanged();


        }

     else if (mshoppedList.size() >0) {
        Toast.makeText(this, "item rea dded: " + mshoppedList.get(position), Toast.LENGTH_SHORT).show();
        mItemlist.add(mshoppedList.get(position));
        mshoppedList.remove(position);
        shoppedListAdapter.notifyDataSetChanged();
        packingListAdapter.notifyDataSetChanged();
    }

    }
public类PackingList扩展AppCompatActivity实现PackingListAdapter.deleteItemListener{
//初始化变量
私人回收视图包装回收视图;
私有PackingListAdapter PackingListAdapter;
私人回收站;
专用打包列表适配器shoppedListAdapter;
文本视图附加框;
字符串[]水果列表;
私有链接列表;
私有链接列表mshoppedList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u packing\u list);
mItemlist=newlinkedlist();
mshoppedList=新链接列表();
//将recyclierview指定给布局上的实际视图
packingRecyclerView=findViewById(R.id.packingList);
shoppedRecyclerView=findViewById(R.id.completedItemsRecyclerView);
//创建适配器并提供要显示的数据
packingListAdapter=新的packingListAdapter(this,mItemlist,this);
shoppedListAdapter=新的PackingListAdapter(this,mshoppedList,this);
//将适配器与recyclerview连接
packingRecyclerView.setAdapter(packingListAdapter);
setAdapter(shoppedListAdapter);
//为recyclerview提供defaultlayout管理器
packingRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
shoppedRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
初始化数据();
}
private void initializeData(){
Resources res=getResources();
String[]fruits=res.getStringArray(R.array.fruits);
String[]vegets=res.getStringArray(R.array.vegets);
//将水果列表传递到recyclerview项目列表中
for(int i=0;i0){
Toast.makeText(此“项添加:”+mshoppedList.get(位置),Toast.LENGTH_SHORT.show();
添加(mshoppedList.get(position));
mshoppedList.remove(位置);
shoppedListAdapter.notifyDataSetChanged();
packingListAdapter.notifyDataSetChanged();
}
}
适配器类:

public class PackingListAdapter extends RecyclerView.Adapter<PackingListAdapter.ItemViewHolder> {




//
private LayoutInflater mInflater;


// list to populate the packing item list with
private LinkedList<String> mItemList;

// initialiasing deleteItemListener
private deleteItemListener mDeleteItemListener;

//constructor
public PackingListAdapter(Context context, LinkedList<String> itemList, deleteItemListener deleteItemListener) {
    mInflater = LayoutInflater.from(context);
    this.mItemList = itemList;
    this.mDeleteItemListener = deleteItemListener;
}

@NonNull
@Override
public PackingListAdapter.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View mItemView = mInflater.inflate(R.layout.packing_item, parent, false);

    return new ItemViewHolder(mItemView, this, mDeleteItemListener);
}

@Override
public void onBindViewHolder(@NonNull PackingListAdapter.ItemViewHolder holder, int position) {
    //get position of the item in the item list
    String mCurrent = mItemList.get(position);
    // pass the data to the view holder.
    holder.itemsView.setText(mCurrent);

}

@Override
public int getItemCount() {
    return mItemList.size();
}

// inner class for item view holder
class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public final TextView itemsView;
    // adapter for the item
    final PackingListAdapter madapter;
    deleteItemListener deleteItemListener;




    public ItemViewHolder(@NonNull View itemView, PackingListAdapter adapter, deleteItemListener deleteItemListener) {
        super(itemView);
        itemsView = itemView.findViewById(R.id.item);
        this.madapter = adapter;
        itemView.setOnClickListener(this);
        this.deleteItemListener = deleteItemListener;
    }

    @Override
    public void onClick(View v) {

        // get layout position in the recycler view
        int mPosition = getLayoutPosition();

        String mItem = mItemList.get(mPosition);

        /*
        // remove the item from the list
        mItemList.remove(mPosition);
        Toast toast = new Toast(v.getContext());
        toast.makeText(v.getContext(),"item removed:" + mItem,Toast.LENGTH_SHORT).show();


         */
        deleteItemListener.onItemClick(mPosition);



        //notify the adapter so it updates the view
        madapter.notifyDataSetChanged();


    }
}

public interface deleteItemListener {
    void onItemClick (int position);
}
public类PackingListAdapter扩展了RecyclerView.Adapter{
//
私人停车场;
//用于填充装箱单的列表
私有链接列表;
//初始化deleteItemListener
私有deleteItemListener mDeleteItemListener;
//建造师
公共PackingListAdapter(上下文上下文、LinkedList itemList、deleteItemListener和deleteItemListener){
mInflater=LayoutInflater.from(上下文);
this.mItemList=itemList;
this.mDeleteItemListener=deleteItemListener;
}
@非空
@凌驾
public PackingListAdapter.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图mItemView=mInflater.充气(R.layout.packing_item,parent,false);
返回新的ItemViewHolder(mItemView、this、mDeleteItemListener);
}
@凌驾
public void onBindViewHolder(@NonNull PackingListAdapter.ItemViewHolder,int位置){
//获取项目在项目列表中的位置
字符串mCurrent=mItemList.get(位置);
//将数据传递给视图保持架。
holder.itemsView.setText(MCCurrent);
}
@凌驾
public int getItemCount(){
返回mItemList.size();
}
//项目视图持有者的内部类
类ItemViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共最终文本视图项目视图;
//项目的适配器
最终包装清单适配器制造商;
deleteItemListener deleteItemListener;
public ItemViewHolder(@NonNull View itemView,PackingListAdapter适配器,deleteItemListener deleteItemListener){
超级(项目视图);
itemsView=itemView.findviewbyd(R.id.item);
this.madapter=适配器;
setOnClickListener(这个);
this.deleteItemListener=deleteItemListener;
}
@凌驾
公共void onClick(视图v){
//获取回收器视图中的布局位置
int mPosition=getLayoutPosition();
字符串mItem=mItemList.get(mPosition);
/*
//从列表中删除该项
mItemList.移除(复合);
Toast Toast=新的Toast(v.getContext());
toast.makeText(v.getContext(),“项已删除:”+mItem,toast.LENGTH\u SHORT.show();
*/
deleteItemListener.onItemClick(组合);
//通知适配器,使其更新t