![](/img/trans.png)
[英]How Android Espresso click an item in Recycler View inside Recycler View?
[英]How to start activty on recycler view item click?
我正在使用JSON從服務器中提取數據,並在回收者視圖中顯示該數據。 但是問題是我可能需要向服務器添加一些新數據。 使用齊射,請求將被發送到服務器,並且回收者視圖列表將被更新。 所以問題是我想在每次“回收者”視圖項單擊上打開新活動。 但是,如果我向服務器添加了一些新數據,我的回收者視圖列表將增加。 因此,我無法基於itemclick位置更改布局/開始活動。 有沒有更好的方法來實現這一目標?
就像whatsapp一樣,我想在回收者視圖的itemclick上打開新的活動/片段。
我嘗試這樣做,但這不是正確的方法。 因為我不知道recyclerview中將會有多少物品。 這是我的代碼:
private final Context context;
public MyViewHolder(View itemView) {
super(itemView);
context = itemView.getContext();
}
@Override
public void onClick(View v) {
final Intent intent;
switch (getAdapterPostion()){
case 0:
intent = new Intent(context, FirstActivity.class);
break;
case 1:
intent = new Intent(context, SecondActivity.class);
break;
...
default:
intent = new Intent(context, DefaultActivity.class);
break;
}
context.startActivity(intent);
}
如果您嘗試復制WhatsApp的功能,請注意,當您單擊列表上的某個項目時,該應用程序將不會打開新的活動,它將打開同一活動發送不同的數據以為該特定用戶加載數據。
...
Intent intent = new Intent(context, Chat.class);
intent.putExtra("EXTRA_USER_ID", userId);
startActivity(intent);
...
在Chat.class上
...
Intent intent = getIntent();
String userId = intent.getStringExtra("EXTRA_USER_ID");
...
使用此用戶標識,您可以為該特定用戶加載數據。
正確的方法是在適配器類中使用接口:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Item> items;
private final OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(Item item);
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public void bind (final Item item, final OnItemClickListener listener) {
yourclickableView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
public MyAdapter(List<Item> items, OnItemClickListener listener) {
...
this.listener = listener;
items = items;
}
最后:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.bind(items.get(position), listener);
...
}
以及每當使用適配器類時:
myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){
@Override
public void onItemClick(Item item) {
//bluh bluh...
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.