java - 如何从 RecyclerView 适配器检索项目计数到另一个活动(不是父活动)?
问题描述
我一直在尝试将 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,并且如果您想StatisticActivity
在单击 recyclerview 中的一项时转到该项目,则可以将列表中的项目数传递给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);
}
}