Android 两个RecyclerViews一个适配器
我有两个RecyclerViews,它们在我的片段中使用相同的适配器,如下所示Android 两个RecyclerViews一个适配器,android,android-recyclerview,Android,Android Recyclerview,我有两个RecyclerViews,它们在我的片段中使用相同的适配器,如下所示 RecyclerView rvFirst; RecyclerView rvSecond; ArrayList<Data> alFirst; ArrayList<Data> alSecond; AdapterBoth adapterFirst; AdapterBoth adapterSecond; ... rvFirst = (RecyclerView) myView.findViewB
RecyclerView rvFirst;
RecyclerView rvSecond;
ArrayList<Data> alFirst;
ArrayList<Data> alSecond;
AdapterBoth adapterFirst;
AdapterBoth adapterSecond;
...
rvFirst = (RecyclerView) myView.findViewById(R.id.rvFirst);
adapterFirst = new AdapterBoth(alFirst);
rvFirst.setAdapter(adapterFirst);
rvFirst.setLayoutManager(mLayoutFirst);
adapterFirst.setOnItemClickListner(new AdapterBoth.onItemClickListner() {
@Override
public void onClick(int id) {
showAcceptDialog(id, TYPE_ONE);
}
});
rvSecond = (RecyclerView) myView.findViewById(R.id.rvSecond);
adapterSecond = new AdapterBoth(alSecond);
rvSecond.setAdapter(adapterSecond);
rvSecond.setLayoutManager(mLayoutSecond);
adapterSecond.setOnItemClickListner(new AdapterBoth.onItemClickListner() {
@Override
public void onClick(int id) {
showAcceptDialog(id, TYPE_TWO);
}
});
private class JSONParse extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
...
jsonDataSet1 = data.getJSONArray("dataSet1");
jsonDataSet2 = data.getJSONArray("dataSet2");
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(u.getInt(TAG_ID), u.getString(TAG_DATE), u.getString(TAG_NAME)));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void args) {
adapterFirst.notifyDataSetChanged();
adapterSecond.notifyDataSetChanged();
}
}
RecyclerView-rvFirst;
第二个循环器;
艾尔菲斯特;
ArrayList alSecond;
适配器两个适配器第一;
适配器两个适配器秒;
...
rvFirst=(RecyclerView)myView.findviewbyd(R.id.rvFirst);
adapterFirst=新适配器,两个(alFirst);
rvFirst.setAdapter(适配器第一);
rvFirst.setLayoutManager(mLayoutFirst);
adapterFirst.setOnItemClickListner(新AdapterBoth.onItemClickListner(){
@凌驾
公共void onClick(int-id){
showAcceptDialog(id,键入_-ONE);
}
});
rvSecond=(RecyclerView)myView.findviewbyd(R.id.rvSecond);
adapterSecond=新的适配器,两个(秒);
rvSecond.setAdapter(适配器秒);
rvSecond.setLayoutManager(mLayoutSecond);
adapterSecond.setOnItemClickListner(新的AdapterBoth.onItemClickListner(){
@凌驾
公共void onClick(int-id){
showAcceptDialog(id,类型_-TWO);
}
});
我获取这样的数据
RecyclerView rvFirst;
RecyclerView rvSecond;
ArrayList<Data> alFirst;
ArrayList<Data> alSecond;
AdapterBoth adapterFirst;
AdapterBoth adapterSecond;
...
rvFirst = (RecyclerView) myView.findViewById(R.id.rvFirst);
adapterFirst = new AdapterBoth(alFirst);
rvFirst.setAdapter(adapterFirst);
rvFirst.setLayoutManager(mLayoutFirst);
adapterFirst.setOnItemClickListner(new AdapterBoth.onItemClickListner() {
@Override
public void onClick(int id) {
showAcceptDialog(id, TYPE_ONE);
}
});
rvSecond = (RecyclerView) myView.findViewById(R.id.rvSecond);
adapterSecond = new AdapterBoth(alSecond);
rvSecond.setAdapter(adapterSecond);
rvSecond.setLayoutManager(mLayoutSecond);
adapterSecond.setOnItemClickListner(new AdapterBoth.onItemClickListner() {
@Override
public void onClick(int id) {
showAcceptDialog(id, TYPE_TWO);
}
});
private class JSONParse extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
...
jsonDataSet1 = data.getJSONArray("dataSet1");
jsonDataSet2 = data.getJSONArray("dataSet2");
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(u.getInt(TAG_ID), u.getString(TAG_DATE), u.getString(TAG_NAME)));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void args) {
adapterFirst.notifyDataSetChanged();
adapterSecond.notifyDataSetChanged();
}
}
私有类JSONParse扩展了异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
...
jsonDataSet1=data.getJSONArray(“dataSet1”);
jsonDataSet2=data.getJSONArray(“数据集2”);
对于(int i=0;i
但问题是,两个RecyclerView都显示相同的数据,或者更确切地说是上次初始化的RecyclerView的数据(如果我交换适配器init的位置,最后一个将同时显示在这两个视图中),我可以看到不同的大小(Log.d(ArrayList.size())
)和不同的数据(如果我看到Log.d(JsonObject.toString())
)
我确信每个RecyclerView都有不同的适配器实例,但它们的作用就像我在这两个视图上设置的一样。我认为这与RecyclerView有关,但我不确定您的“doInBackground”中是否有错误,在第二个循环中,您使用变量“u”,但从第一个循环中插入变量“o”的值:
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for(int i=0;i
应该是:
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(u.getInt(TAG_ID), u.getString(TAG_DATE), u.getString(TAG_NAME)));
}
for(int i=0;i
在“doInBackground”中,您有一个错误,在第二个循环中,您使用变量“u”,但从第一个循环中插入变量“o”的值:
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for(int i=0;i
应该是:
for (int i = 0; i < jsonDataSet1.length(); i++) {
JSONObject o = jsonDataSet1.getJSONObject(i);
alFirst.add(new Data(o.getInt(TAG_ID), o.getString(TAG_DATE), o.getString(TAG_NAME)));
}
for (int i = 0; i < jsonDataSet2.length(); i++) {
JSONObject u = jsonDataSet2.getJSONObject(i);
alSecond.add(new Data(u.getInt(TAG_ID), u.getString(TAG_DATE), u.getString(TAG_NAME)));
}
for(int i=0;i
是的,那是我的错误复制、粘贴和更改。。。很抱歉。但我也去检查了一下,以防万一,这不是问题所在(我也遇到了同样的问题)。但是谢谢你注意到我发现这是我的错误。。。出于某种愚蠢的原因,我在适配器的构造函数中输入了传递的数据是静态的。所以我将把这个作为答案,因为你指导我寻找我的错误。。。所以这是我的错误复制,粘贴和更改。。。很抱歉。但我也去检查了一下,以防万一,这不是问题所在(我也遇到了同样的问题)。但是谢谢你注意到我发现这是我的错误。。。出于某种愚蠢的原因,我在适配器的构造函数中输入了传递的数据是静态的。所以我将把这个作为答案,因为你指导我寻找我的错误。。。所以我觉得这很有趣