【问题标题】:Android: how do I fix CardView selection based on position passed in an Intent?Android:如何根据 Intent 中传递的位置修复 CardView 选择?
【发布时间】:2017-05-19 09:02:00
【问题描述】:

我将数据从我的 RecyclerView 适配器传递到我的 MainActiviy。我还使用适配器中的接口来捕获 MainActivity 的 onItemClick() 中的 CardView 项目位置,并使用意图将该位置传递给新的 Activity (CardViewDetails)。问题是 CardViewDetails 加载了错误的 CardView。如何使用 CardView“位置”来启动正确的 CardView?我在这里错过了什么?

MainActivity
...
public void passDataFromAdapter(Bundle bundle) {
    data = bundle.getString("spantimeinhours");
    data2 = bundle.getLong("timeinhours");
}

// This method works with an interface in the Adapter to capture the 
//  CardView item position.    
@Override
public void onItemClick(int position, final View view) {        

    Intent intent = new Intent(this,Details.class);        
    intent.putExtra("adapterSpanTimeInHours",data);
    intent.putExtra("adapterTimeInHours",data2);
    startActivity(intent);
}

Details
...
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_details);

    Bundle extras = getIntent().getExtras();
        msgFromAdapter = extras.getString("adapterSpanTimeInHours");
        msg2FromAdapter = extras.getLong("adapterTimeInHours", 0);
}     

Adapter
public class MyRecylerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private void passDataFromAdapter(Bundle bundle) {
    if (context == null)
        return;
    if (context instanceof MainActivity) {
        MainActivity activity = (MainActivity) context;
        activity.passDataFromAdapter(bundle); // this method must be implemented inside `MainActivity`
    }
}

}

【问题讨论】:

  • 我认为您必须发布您的适配器代码以及它与主要活动的关系。
  • 请在此处发布您的适配器代码
  • ok 将在上面添加。
  • 请发布您的整个适配器代码。
  • 上面添加了完整的适配器代码。

标签: android android-intent android-recyclerview


【解决方案1】:

将此粘贴​​到您的 onBindViewHolder 中

 viewHolder.myView.setOnClickListener(new View.OnClickListener() {
        // Handles the row being clicked.
        @Override
        public void onClick(View view) {
            int adapterPos = itemHolder.getAdapterPosition(); // get the item position.
            if (adapterPos != RecyclerView.NO_POSITION) {
                if (recyclerItemClickListener != null) {
                    recyclerItemClickListener.onItemClick(adapterPos, itemHolder.itemView);
                }
            }
        }
    });

【讨论】:

  • 这里的 Myview 是您想​​要实现 onClick 的视图
猜你喜欢
  • 2015-04-24
  • 2018-08-21
  • 2021-10-20
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多