Android 两个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

我有两个RecyclerViews,它们在我的片段中使用相同的适配器,如下所示

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
是的,那是我的错误复制、粘贴和更改。。。很抱歉。但我也去检查了一下,以防万一,这不是问题所在(我也遇到了同样的问题)。但是谢谢你注意到我发现这是我的错误。。。出于某种愚蠢的原因,我在适配器的构造函数中输入了传递的数据是静态的。所以我将把这个作为答案,因为你指导我寻找我的错误。。。所以这是我的错误复制,粘贴和更改。。。很抱歉。但我也去检查了一下,以防万一,这不是问题所在(我也遇到了同样的问题)。但是谢谢你注意到我发现这是我的错误。。。出于某种愚蠢的原因,我在适配器的构造函数中输入了传递的数据是静态的。所以我将把这个作为答案,因为你指导我寻找我的错误。。。所以我觉得这很有趣