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