4

GridView控件包含分类传递JSON阵列,当我做任何GridView的项目的挖掘(即 - 任何类别)我想显示的项目属于那些仅在ViewPager特定类别。如何使用JSON对象

例如,我有两个categories第一 - 电子和第二 - 电器,仍然每当I DO轻触Appliances类别 - 它表示allitems(从Electronics 1 to Appliances 2),而它具有显示only items那些under Appliances

发行

仍然显示在ViewPager的所有项目,无论哪个H类被用户点击... 我如何显示属于点击类别的项目?

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(); 
      ... 

     } 
    } 

} 
+0

通行证类别名称或类别ID在'ViewPagerAdapter(...)'的'Argument'并将其过滤 –

+0

@MD我曾尝试没有得到解决,你能指出我的错误? – Sun

+0

您将类别传递给'ViewPagerAdapter'的位置? –

回答

3

你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); 
       }