2015-03-10 3 views
0

Я получаю responseJson, и я пытаюсь точно установить данные для загрузки в моем режиме сетки. У меня есть 2 textviews на моем экране, и как только я нажимаю 1 textview, тогда предметы, принадлежащие SubCategoryID =1, должны загружаться. Когда текстовое изображение 2 нажимается, элементы должны принадлежать SubCategoryID = 2.Загрузите данные json в Gridview в соответствии с текстовым щелчком

Я дал следующий код,

@Override 
    public void onTaskCompleted(JSONArray responseJson) { 

    try { 
     final List<String> descriptions = new ArrayList<String>(); 
     final List<String> imageUrls = new ArrayList<String>(); 

     for (int i = 0; i < responseJson.length(); ++i) { 
      final JSONObject object = responseJson.getJSONObject(i); 

      mQuickReturnViewTop 
      .setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        try { 
         if ((object.getString("MainCategoryID")) 
           .equals("1") 
           && (object 
             .getString("SubCategoryID")) 
             .equals("1")) { 
          Log.i("ImageURL ", 
            object.getString("ImageURL")); 
          imageUrls.add(object 
            .getString("ImageURL")); 
          Log.i("Description ", 
            object.getString("Description")); 
          descriptions.add(object 
            .getString("Description")); 

         } 
        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        CustomGridPizza adapter = new CustomGridPizza(
          getActivity(), descriptions, imageUrls); 
        grid.setAdapter(adapter); 

       } 

      }); 

      mQuickReturnViewIta 
      .setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        try { 
         if ((object.getString("MainCategoryID")) 
           .equals("1") 
           && (object 
             .getString("SubCategoryID")) 
             .equals("2")) { 
          Log.i("ImageURL ", 
            object.getString("ImageURL")); 
          imageUrls.add(object 
            .getString("ImageURL")); 
          Log.i("Description ", 
            object.getString("Description")); 
          descriptions.add(object 
            .getString("Description")); 
         } 
        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        CustomGridPizza adapter = new CustomGridPizza(
          getActivity(), descriptions, imageUrls); 
        grid.setAdapter(adapter); 

       } 

      }); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

При использовании этого кода, он загружает только один пункт, и когда продолжайте нажимать на виде текста, то он добавляет такую ​​же деталь один за другим.

Мне нужна помощь для загрузки элементов в сетку сразу. Любая помощь будет оценена.

ответ

0

Для каждого объекта JSON вы создаете новый OnClickListener и перезаписываете последний с вызовом setOnClickListener, поэтому в основном вы всегда добавляете последний объект JSON. Вам необходимо создать/установить OnClickListener и адаптер за пределами цикла for.

try { 
     final List<String> descriptions1 = new ArrayList<String>(); 
     final List<String> imageUrls1 = new ArrayList<String>(); 

     final List<String> descriptions2 = new ArrayList<String>(); 
     final List<String> imageUrls2 = new ArrayList<String>(); 

     for (int i = 0; i < responseJson.length(); ++i) { 
      final JSONObject object = responseJson.getJSONObject(i); 

      try { 
       if ((object.getString("MainCategoryID")) 
         .equals("1") 
         && (object 
         .getString("SubCategoryID")) 
         .equals("1")) { 
        Log.i("ImageURL ", 
          object.getString("ImageURL")); 
        imageUrls1.add(object 
          .getString("ImageURL")); 
        Log.i("Description ", 
          object.getString("Description")); 
        descriptions1.add(object 
          .getString("Description")); 

       }else if ((object.getString("MainCategoryID")) 
         .equals("1") 
         && (object 
         .getString("SubCategoryID")) 
         .equals("2")) { 
        Log.i("ImageURL ", 
          object.getString("ImageURL")); 
        imageUrls2.add(object 
          .getString("ImageURL")); 
        Log.i("Description ", 
          object.getString("Description")); 
        descriptions2.add(object 
          .getString("Description")); 
       } 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mQuickReturnViewTop 
        .setOnClickListener(new View.OnClickListener() { 

         @Override 
         public void onClick(View v) { 



          CustomGridPizza adapter = new CustomGridPizza(
            getActivity(), descriptions1, imageUrls1); 
          grid.setAdapter(adapter); 

         } 

        }); 

      mQuickReturnViewIta 
        .setOnClickListener(new View.OnClickListener() { 

         @Override 
         public void onClick(View v) { 

          CustomGridPizza adapter = new CustomGridPizza(
            getActivity(), descriptions2, imageUrls2); 
          grid.setAdapter(adapter); 

         } 

        }); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Хорошо, тогда как я могу сопоставить и загрузить SubCategoryID = 1 в соответствующее текстовое представление? Когда я создаю адаптер снаружи для цикла, тогда все элементы (элементы относятся к SubCategoryID 1 и 2) загружаются в сетку. – modabeckham

+0

Вы можете создать два набора списков или даже два адаптера (для каждой подкатегории) и при нажатии соответствующих кнопок для установки правильного адаптера на сетке. –

+0

Не упустите помощь мне с уровнем кодирования. Я не могу установить 2 адаптера внутри соответствующего события click – modabeckham