2016-05-27 5 views
3

Привет Я работаю над CardSwipe функциями, такими как tinder. (Для понимания см прикрепленного изображения)Android: не удалось добавить элементы списка элементов динамически через залп

enter image description here

Для этого я следовал this code, при использовании статических данных, такими как сильфон, я успешно добавление элементов в ListView

private void loadCards2(){ 

     itemsaArrayList = new ArrayList<>(); 

     for(int i = 0; i < 10; i++){ 

      CardSwipeItems items = new CardSwipeItems(); 

      items.setCardImageUrl("http://i.ytimg.com/vi/PnxsTxV8y3g/maxresdefault.jpg"); 
      items.setCardDescription("But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness."); 

      itemsaArrayList.add(items); 
     } 

     flingContainer = (SwipeFlingAdapterView) findViewById(R.id.frame); 
     myAppAdapter = new CardSwipeAdapter(itemsaArrayList, CardSwipeActivity.this); 
     flingContainer.setAdapter(myAppAdapter); 

     initControlls(); 

    } 

Но когда я пытаясь добавить элементы динамически, используя средства залпа, предметы не добавляются в ListView. (Для этого волейбола см. Метод loadCards() в CardSwipeActivity)

Я пробовал много подходов, чтобы динамически загружать элементы в виде списка. Для экс: Я использовал Thread (для кода см this) и я также использовал Handler (для кода см this), но я не могу добавить элементы в ListView динамически

Если какой-либо один знает решение для этого средства, пожалуйста, Расскажи мне. Спасибо .......

Редактировать

*My method* 

private void loadCards(){ 

     String Url = "myApi"; 
     Log.e("Url", Url); 

     final ProgressDialog dialog = ProgressDialog.show(CardSwipeActivity.this, null, null); 
     ProgressBar spinner = new android.widget.ProgressBar(CardSwipeActivity.this, null,android.R.attr.progressBarStyle); 
     spinner.getIndeterminateDrawable().setColorFilter(Color.parseColor("#009689"), android.graphics.PorterDuff.Mode.SRC_IN); 
     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
     dialog.setContentView(spinner); 
     dialog.setCancelable(false); 
     dialog.show(); 


     StringRequest request = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 

       dialog.dismiss(); 

       if(response != null && !response.startsWith("<HTML>")){ 

        Log.e("OnResponse", response); 

        try { 
         JSONArray jsonArray = new JSONArray(response); 

         if(jsonArray.length() > 0){ 

          itemsaArrayList = new ArrayList<>(); 

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

           JSONObject singleObj = jsonArray.getJSONObject(i); 

           String imgId = singleObj.getString("avatar_file_id"); 
           String name = singleObj.getString("name"); 

           CardSwipeItems items = new CardSwipeItems(); 

           Log.e("imgId", imgId); 
           Log.e("name", name); 

           items.setCardImageUrl(imgId); 
           items.setCardDescription(name); 

           itemsaArrayList.add(items); 

          } 

          flingContainer = (SwipeFlingAdapterView) findViewById(R.id.frame); 
          myAppAdapter = new CardSwipeAdapter(itemsaArrayList, CardSwipeActivity.this); 
          flingContainer.setAdapter(myAppAdapter); 

          initControlls(); 

         } 

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

       }else{ 

        Log.e("Internet", "Internet"); 
       } 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       dialog.dismiss(); 

       if(error != null){ 

        Log.e("error", error.toString()); 
       }else{ 


       } 
      } 
     }){ 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String,String> params = new HashMap<String, String>(); 
       params.put("token","b32daf7b50c7f21dba80dd0651174e3839c22f56"); 
       params.put("user_id","386"); 

       Log.e("Headers", "**********Headers*************"); 
       Log.e("token","b32daf7b50c7f21dba80dd0651174e3839c22f56"); 
       Log.e("user_id","386"); 

       return params; 
      } 
     }; 

     RequestQueue queue = Volley.newRequestQueue(CardSwipeActivity.this); 
     queue.add(request); 
     queue.getCache().remove(Url); 

    } 
+0

паста проблематичного кода здесь. Нам не нужно было загружать ваш проект –

+1

Вы пробовали метод runOnUiThread, созданный простым классом Runnable. – Ankur1994a

+0

@ VladMatvienko: Посмотрите мое редактирование – Bahu

ответ

1

Вы можете добавить элементы динамически к адаптеру addding элементов в список, переданных первоначально к адаптеру, как это:

itemsaArrayList.add(items); 

чем вам необходимо уведомить об этом адаптер, как это от вашего пользовательского интерфейса резьбы:

runOnUiThread(new Runnable() { 
    public void run() { 
     adapter.notifyDataSetChanged(); 
    } 
}); 

И для вызова его в UI-Thread используйте использование runOnUiThread() Activity. Тогда только, notifyDataSetChanged() будет работать.

также посмотреть на эту post

+1

вы великолепны. Это работает – Bahu

0

Если вы получаете ответ от сервера затем попытаться переместить ниже линии от метода onResponse в OnCreate метод.

 flingContainer = (SwipeFlingAdapterView) findViewById(R.id.frame); 

Надеется, что это будет работать

+1

Я пробовал это раньше, он не работает – Bahu

Смежные вопросы