GridView包含类别,当我点击任何GridView项目(即 – 任何类别)时,我想仅在ViewPager中显示那些属于该特定类别的项目.
例如,我首先有两个类别 – 电子设备和第二个设备 – 仍然每当我点击设备类别时 – 它显示所有项目(从电子设备1到设备2),而它必须仅显示设备类别下的项目
问题
仍然显示ViewPager中的所有项目,无论用户点击了哪个类别….我怎样才能显示属于tapped类别的那些项目?
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); }