繁体   English   中英

如何从 RecyclerView 适配器检索项目计数到另一个活动(不是父活动)?

[英]How to retrieve item count from RecyclerView adapter into another activity(not parent activity)?

我一直在尝试将 recyclerview 适配器(TaskAdapter)中的项目数显示到一个活动(StatisticsActivity)中。 我是初学者,所以如果我表现出低水平的理解,我深表歉意。

统计活动:

 public class StatisticActivity extends AppCompatActivity implements TaskAdapter{ TextView itemcount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_statistic); itemcount = findViewById(R.id.itemcount); itemcount.setText(myTask.size()); } }

任务适配器:

 public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.MyViewHolder>{ Context context; ArrayList<MyTask> myTask; public TaskAdapter(Context c, ArrayList<MyTask> p) { context = c; myTask = p; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_task,viewGroup, false)); } @Override public int getItemCount() { return myTask.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView titletask, desctask, datetask, keytask; public MyViewHolder(@NonNull View itemView) { super(itemView); titletask = (TextView) itemView.findViewById(R.id.titletask); desctask = (TextView) itemView.findViewById(R.id.desctask); datetask = (TextView) itemView.findViewById(R.id.datetask); } } }

事情就是这样。 如果您在项目中的某个地方有一个适配器,并且您在一个活动中想要适配器所持有的列表的大小......那么这可能是不可能的。

但是,如果您有一个显示项目列表的 recyclerview,并且当您单击 recyclerview 中的一个项目时,如果您希望 go 到StatisticActivity ,则可以将列表中的项目数传递给StatisticActivity

为此,您需要在 Adapter 中使用和接口,并在StatisticActivity中实现该接口。

在适配器中创建一个接口:

public interface OnItemClick {
    void onClick (int size);
}

StatisticActivity中,从适配器实现接口。

public class StatisticActivity extends AppCompatActivity implements OnItemClick {
      private int listSize;
      ......
      ......

      @Override
      void onClick (int size){
           listSize = size; // this is your list size from adapter.
      }
}

在适配器中

public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.MyViewHolder>{

    Context context;
    OnItemClick mCallback;

    ArrayList<MyTask> myTask;

    public TaskAdapter(Context c, ArrayList<MyTask> p, OnItemClick listener) {
        context = c;
        myTask = p;
        this.mCallback = listener;
    }


    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_task,viewGroup, false));
    }


    @Override
    public int getItemCount() {
        mCallback.onClick(myTask.size());
        return myTask.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView titletask, desctask, datetask, keytask;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            titletask = (TextView) itemView.findViewById(R.id.titletask);
            desctask = (TextView) itemView.findViewById(R.id.desctask);
            datetask = (TextView) itemView.findViewById(R.id.datetask);
        }
    }

    public interface OnItemClick {
         void onClick (int size);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM