GridView包含类别,当我点击任何一个GridView项(即任何类别)时,我希望仅在ViewPager中显示属于该特定类别的项。
例如,我有两个第一类电子产品和第二类电器,每当我点击类别时,它仍然显示categoriesAppliances(来自all),而它必须显示itemsElectronics 1 to Appliances 2类别
问题
仍然显示viewpager中的所有项,无论用户点击了哪个类别…我怎样才能显示那些只属于抽头类别的项目?

public class MainActivity extends Activity {

    ArrayList<Items> itemsArrayList;
    ...

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

        setContentView(R.layout.activity_main);

        itemsArrayList = new ArrayList<Items>();

        ...

        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {

                String categoryName = menusArrayList.get(position).getName().toString();
                Log.d("categoryName:", categoryName);

                menus = menusArrayList.get(position);
                itemsArrayList = menus.getItemsArrayList();

                adapter = new ViewPagerAdapter(MenusActivity.this, R.layout.adapter_viewpager, itemsArrayList);

                viewPager.setAdapter(adapter);
            }
        });
    }


    class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {

                .....

                    JSONArray jsonArray = jsonObject.getJSONArray("category");

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jObject = jsonArray.getJSONObject(i);

                        menus = new Menus();

                        menus.setName(jObject.getString("name"));
                        menus.setImage(jObject.getString("image"));

                        JSONArray imagesArray = jObject.getJSONArray("items");

                        for(int j=0; j<imagesArray.length(); j++)
                        {
                            JSONObject imagesObject = imagesArray.getJSONObject(j);

                            items = new Items();
                            items.setTitle(imagesObject.getString("title"));
                            items.setImage(imagesObject.getString("image"));

                            itemsArrayList.add(items);
                        }

                        menus.setItemsArrayList(itemsArrayList);
                        menusArrayList.add(menus);
                    }
                    return true;
                }
                ...
            return false;
        }

        protected void onPostExecute(Boolean result) {
            dialog.cancel();
            ...

        }
    }

}

最佳答案

itemArrayList是全局的,在解析时,每次读取类别时都会将项添加到该列表中。因此,itemlistarray包含所有项。由于在将项添加到列表时它是对列表的引用,因此也将项添加到以前的类别,因为它们引用同一列表。试着这样改变你的内心循环。

ArrayList<Items> itemsArrayList = new ArrayList<Items>();
for(int j=0; j<imagesArray.length(); j++)
                        {
                        JSONObject imagesObject = imagesArray.getJSONObject(j);

                    items = new Items();
                    items.setTitle(imagesObject.getString("title"));
                    items.setImage(imagesObject.getString("image"));

                    itemsArrayList.add(items);
                }

10-06 14:53