Activity1向Myadapter传递int变量pub_or_priv失败求助
解决Activity向Adapter传递int变量始终为0的问题
我来帮你排查下这个问题,大概率是变量传递的时机或者Adapter初始化逻辑出了问题,咱们一步步来解决:
1. 先确认Adapter的构造方法是否正确接收变量
首先要保证你的MyAdapter有对应的构造参数来接收这个int值,并且把它赋值给Adapter的成员变量,别犯低级的命名错误哦:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { // 定义成员变量存储传递过来的值 private int pubOrPriv; // 构造方法,接收Activity传过来的参数 public MyAdapter(int pubOrPriv) { this.pubOrPriv = pubOrPriv; // 其他初始化逻辑(比如数据源初始化) } // ... 其他Adapter方法(onCreateViewHolder、onBindViewHolder等) }
2. 确保初始化Adapter时,已经拿到了正确的pub_or_priv值
很多时候问题出在你提前初始化了Adapter——比如在服务器请求还没返回、pub_or_priv还是默认值0的时候就创建了Adapter实例,之后即使拿到了正确值,Adapter也不会自动同步。
正确的做法是:在服务器请求成功、完成字符串转int的操作之后,再创建Adapter并设置给RecyclerView,记得先打日志确认Activity里的变量值是对的:
// 服务器请求成功的回调方法里 @Override public void onSuccess(JSONObject obj) { try { // 转换变量 int pub_or_priv = Integer.parseInt(obj.getString("publicorprivate")); // 先打日志确认这个值是不是0、1、2,排除服务器返回数据的问题 Log.d("Activity1", "当前pub_or_priv的值:" + pub_or_priv); // 这里才初始化Adapter并设置 MyAdapter myAdapter = new MyAdapter(pub_or_priv); yourRecyclerView.setAdapter(myAdapter); } catch (JSONException e) { e.printStackTrace(); // 别忘了处理JSON解析异常,可能是字段名写错了? } }
3. 如果已经提前初始化了Adapter,用更新方法同步变量
要是因为业务需求,你必须提前创建Adapter实例,那就在Adapter里加一个更新变量的方法,拿到值后主动同步并刷新:
// 在MyAdapter中添加更新方法 public void updatePubOrPriv(int newPubOrPriv) { this.pubOrPriv = newPubOrPriv; // 刷新Adapter,让新值生效 notifyDataSetChanged(); // 如果只需要刷新特定条目,可以用notifyItemChanged(position)优化 }
然后在Activity的回调里调用这个方法:
// 拿到正确的pub_or_priv后 myAdapter.updatePubOrPriv(pub_or_priv);
4. 检查Adapter中使用变量的地方
最后确认下你在Adapter里使用这个变量的代码,有没有不小心定义了同名的局部变量覆盖了成员变量?比如在onBindViewHolder里写了int pubOrPriv = 0;,那肯定会一直用0的。
内容的提问来源于stack exchange,提问作者CHarris
相关产品推荐
相关产品推荐

