每个选项卡在 recyclerview 中都有相同的数据

Every Tab is having same data in the recyclerview

大家好,我使用 JSONS 创建了选项卡,每个选项卡都包含回收器视图,其中将显示该选项卡所需的数据,但与输出相同的数据显示在每个选项卡,其中还显示了一项

JSON

{
    "status": "Success",
    "message": "Menu is Listed Here",
    "menu1": [{
        "category": "Women",
        "items": [{
            "id": "41",
            "title": "Plain Classic Abaya "
        }, {
            "id": "45",
            "title": "Modest Abaya Collection "
        }, {
            "id": "48",
            "title": "Khaleejia Abaya  "
        }, {
            "id": "53",
            "title": "Modern Jersy Classic Abaya"
        }, {
            "id": "54",
            "title": "Sophisticated Abayas"
        }, {
            "id": "55",
            "title": "Khaleejia Kaftans "
        }, {
            "id": "56",
            "title": "Jersey Maxi Kaftans "
        }, {
            "id": "57",
            "title": "Wedding Abaya"
        }, {
            "id": "58",
            "title": "Latest Trend Abaya"
        }]
    }, {
        "category": "Kids",
        "items": [{
            "id": "40",
            "title": "Girls Abaya Plain "
        }, {
            "id": "52",
            "title": "Girls Abaya Modern designs "
        }]
    }, {
        "category": "Men",
        "items": [{
            "id": "42",
            "title": "Modern Stylish Thobes "
        }, {
            "id": "46",
            "title": "Embroidery Thobes  "
        }, {
            "id": "47",
            "title": "Simple Plain Thobes "
        }]
    }],
    "wholesale": "Wholesale Products"
}

TabsFragment.java

public class TabsFragment extends Fragment {
    RecyclerView recycler_view;
    Recycler_Adapter recycler_adapter;

    public TabsFragment() {

    }

    public static Fragment getInstance(int position) {
        OneFragment fragment = new OneFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("position", position);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        recycler_view = (RecyclerView) view.findViewById(R.id.recycler_view);
        int position = getArguments().getInt("position", 0);
        catmethod();
        return view;
    }

    private void catmethod() {
        String url = "http://www.souqalkhaleejia.com/webapis/categories.php";
        JsonObjectRequest catreq = new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray menuarray = response.getJSONArray("menu1");
                    for (int i = 0; i < menuarray.length(); i++) {
                        JSONObject menuobj = menuarray.getJSONObject(i);
                        JSONArray itemarray = menuobj.getJSONArray("items");
                        for (int j = 0; j < itemarray.length(); j++) {
                            JSONObject itemobj = itemarray.getJSONObject(j);
                            TestPojo test = new TestPojo();
                            test.setIdstring(itemobj.getString("id"));
                            test.setTitlestring(itemobj.getString("title"));
                            recycler_adapter = new Recycler_Adapter(getActivity(), itemarray);
                            recycler_view.setLayoutManager(new LinearLayoutManager(getActivity()));
                            recycler_view.setAdapter(recycler_adapter);
                            recycler_adapter.notifyDataSetChanged();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("CatMenu", String.valueOf(error));
            }
        });
        AppController.getInstance().addToRequestQueue(catreq);
    }

}

RecyclerViewAdapter.java

public class Recycler_Adapter extends RecyclerView.Adapter<ViewHolder> {
    private Context context;
    private JSONArray jsonArray;

    public Recycler_Adapter(Context context, JSONArray jsonArray) {
        this.context = context;
        this.jsonArray = jsonArray;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View namelist = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_list_row, parent, false);
        ViewHolder viewHolder = new ViewHolder(namelist);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        try {
            for (int i=0;i<jsonArray.length();i++){
                String idname = jsonArray.getJSONObject(position).getString("id");
                String titlename = jsonArray.getJSONObject(position).getString("title");

                holder.cat_item_id.setText(idname);
                holder.cat_item_name.setText(titlename);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    @Override
    public int getItemCount() {
        return jsonArray.length();
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    TabLayout tabs;
    ViewPager viewpager;
    List<TestPojo> testlit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        assert getSupportActionBar() != null;
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        tabs = (TabLayout) findViewById(R.id.tabs);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        testlit=new ArrayList<TestPojo>();
        catmethod();
    }
    private void catmethod() {
        String url = "http://www.souqalkhaleejia.com/webapis/categories.php";
        JsonObjectRequest catreq = new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray menuarray = response.getJSONArray("menu1");
                    for (int i = 0; i < menuarray.length(); i++) {
                        JSONObject menuobj = menuarray.getJSONObject(i);
                     tabs.addTab(tabs.newTab().setText(menuobj.getString("category")));
test.setTitlestring(itemobj.getString("title"));
                     }
                    }
                    TabsAdapter tabsAdapter = new TabsAdapter(getSupportFragmentManager(), menuarray);
                    viewpager.setAdapter(tabsAdapter);
                    tabs.setupWithViewPager(viewpager);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("CatMenu", String.valueOf(error));
            }
        });
        AppController.getInstance().addToRequestQueue(catreq);
    }
}

TabsAdapter.class

public class TabsAdapter extends FragmentPagerAdapter {
    private JSONArray jsonArray;
    public TabsAdapter(FragmentManager manager, JSONArray jsonArray) {
        super(manager);
        this.jsonArray = jsonArray;
    }
    @Override
    public Fragment getItem(int position) {
        return OneFragment.getInstance(position);
    }
    @Override
    public int getCount() {
        return jsonArray.length();
    }
    @Override
    public CharSequence getPageTitle(int position) {
        String stringarray= null;
        try {
            stringarray = jsonArray.getJSONObject(position).getString("category");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return stringarray;
    }
}

更换适配器:

public class Recycler_Adapter extends RecyclerView.Adapter<ViewHolder> {
    private Context context;

    private List<TestPojo> list;

    public Recycler_Adapter(Context context, List list) {
        this.context = context;
        this.list= list;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View namelist = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_list_row, parent, false);
        ViewHolder viewHolder = new ViewHolder(namelist);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        try {   
                 TestPojo testpojo = list.get(position);
                holder.cat_item_id.setText(testpojo.getId());
                holder.cat_item_name.setText(testpojo.getTitle());

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    @Override
    public int getItemCount() {
        return list.length();
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    TabLayout tabs;
    ViewPager viewpager;
    List<TestPojo> testlit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        assert getSupportActionBar() != null;
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        tabs = (TabLayout) findViewById(R.id.tabs);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        testlit=new ArrayList<TestPojo>();
        catmethod();
    }
    private void catmethod() {
        String url = "http://www.souqalkhaleejia.com/webapis/categories.php";
        JsonObjectRequest catreq = new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray menuarray = response.getJSONArray("menu1");
                    for (int i = 0; i < menuarray.length(); i++) {
                        JSONObject menuobj = menuarray.getJSONObject(i);
                     tabs.addTab(tabs.newTab().setText(menuobj.getString("category")));
test.setTitlestring(itemobj.getString("title"));
                     }
                    }
                    TabsAdapter tabsAdapter = new TabsAdapter(getSupportFragmentManager(), menuarray);
                    viewpager.setAdapter(tabsAdapter);
                    tabs.setupWithViewPager(viewpager);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("CatMenu", String.valueOf(error));
            }
        });
        AppController.getInstance().addToRequestQueue(catreq);
    }
}

在TestFragment中使用位置:

private void catmethod() {
            String url = "http://www.souqalkhaleejia.com/webapis/categories.php";
            int position = getArguments().getInt("position", 0);
            JsonObjectRequest catreq = new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray menuarray = response.getJSONArray("menu1");
                            JSONObject menuobj = menuarray.getJSONObject(position);
                            JSONArray itemarray = menuobj.getJSONArray("items");
                            List<TestPojo> objList = new ArrayList<>();
                            for (int j = 0; j < itemarray.length(); j++) {
                                JSONObject itemobj = itemarray.getJSONObject(j);
                                TestPojo test = new TestPojo();
                                test.setIdstring(itemobj.getString("id"));
                                test.setTitlestring(itemobj.getString("title"));
                                objList.add(test);
                            }
                            recycler_adapter = new Recycler_Adapter(getActivity(), objList);
                            recycler_view.setLayoutManager(new LinearLayoutManager(getActivity()));
                            recycler_view.setAdapter(recycler_adapter);
                            recycler_adapter.notifyDataSetChanged();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("CatMenu", String.valueOf(error));
                }
            });
            AppController.getInstance().addToRequestQueue(catreq);
        }

删除 loop.Or 您将获得显示最后数据的所有行。 你应该在 catmethod().

中使用 getArguments().getInt("position", 0)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    try {
            String idname = jsonArray.getJSONObject(position).getString("id");
            String titlename = jsonArray.getJSONObject(position).getString("title");

            holder.cat_item_id.setText(idname);
            holder.cat_item_name.setText(titlename);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

代码爆炸应该只在 TestFragment.You 中使用一次,不应该把它们放在循环中。

recycler_adapter = new Recycler_Adapter(getActivity(), itemarray);
                                recycler_view.setLayoutManager(new LinearLayoutManager(getActivity()));
                                recycler_view.setAdapter(recycler_adapter);
                                recycler_adapter.notifyDataSetChanged();


int position = getArguments().getInt("position", 0);

你在哪里使用 position.You 得到这个位置 select 在每个选项卡 0=>women,1=>kids,2=>men 中显示什么数据。但是你在哪里使用它? 请尝试使用TestFragment的catmethod中的positoin。