2013-05-21 147 views
0

我無法刷新我的列表視圖。我知道有很多這方面的幫助。但我無法讓我的listview刷新。listview在android中刷新aynctask

還是讓編輯我的代碼顯示的AsyncTask

一點點有兩個活動。第一個Activity有列表視圖來查看共享內容,第二個活動有一個編輯文本框(用來輸入共享)和一個按鈕。點擊按鈕後,它返回字符串,這是JSON響應,我需要在前面的活動中添加它。

現在的問題是,當我刷新第一頁完全打到服務器,它得到的響應,但這不是我想要的。它不應該回到服務器。它應該簡單地添加到列表視圖適配器中。

我已經評論了PostExecute()中的代碼。我曾嘗試過,但它沒有反映出來。

public class ShareAsyncTask extends AsyncTask<String, Void, ArrayList<EventsStreamBean>> { 

    public ProgressDialog pd = new ProgressDialog(EventStreamActivity.this); 

    String success_share_val; 

    @Override 
    protected ArrayList<EventsStreamBean> doInBackground(
      String... result) { 
     // TODO Auto-generated method stub 


     JSONObject jsonobj = new JSONObject(result[0].toString()); 

     success_share_val = jsonobj.getString(Constants.SUCCESS); 


     //checks the success value 
     if(success_share_val.equalsIgnoreCase("1")) {    

     JSONArray events_stream_share_array = jsonobj.getJSONArray("streamArray"); 

     if(events_stream_share_array.length() > 0) { 


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

        EventsStreamBean events_stream_bean = new EventsStreamBean(); 

        JSONObject events_stream_object = events_stream_share_array.getJSONObject(i); 

        events_stream_bean.setStreamId(events_stream_object.getString(Constants.STREAM_ID)); 
        events_stream_bean.setStreamType(events_stream_object.getString(Constants.STREAM_TYPE)); 

        events_stream_bean.setUserId(events_stream_object.getString(Constants.USER_ID)); 
        events_stream_bean.setUserName(events_stream_object.getString(Constants.USER_NAME)); 
        events_stream_bean.setUserType(events_stream_object.getString(Constants.USER_TYPE)); 
        events_stream_bean.setUserAvatar(events_stream_object.getString(Constants.USER_AVATAR)); 

        arraylist_events_stream.add(events_stream_bean); 

       } 
     }else { 
      Log.i("Test", "No Events Streams Available"); 
     } 

     } 

     }catch(Exception e) {} 



     return arraylist_events_stream; 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     this.pd.setMessage("Loading...."); 
     pd.setCanceledOnTouchOutside(false); 
     pd.setCancelable(false); 
     this.pd.show(); 
    } 

    @Override 
    protected void onPostExecute(final ArrayList<EventsStreamBean> result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     if(this.pd.isShowing()) { 
      this.pd.dismiss(); 
     } 


     Toast.makeText(EventStreamActivity.this, "Post shared successfully", Toast.LENGTH_SHORT).show(); 
     new EventsStreamAsyncTask().execute(temp_val); 



     /*runOnUiThread(new Runnable() { 
      public void run() { 

       //EventStream_Customadapter adapter = (EventStream_Customadapter) list_view.getAdapter(); 
       //adapter.clearData(); 

       adapter.updateData(result); 
       //adapter = new EventStream_Customadapter(EventStreamActivity.this, arraylist_events_stream); 
       //list_view.setAdapter(adapter); 
       //adapter.notifyDataSetChanged(); 

      } 
     });*/ 

    } 

} 
+0

你能顯示適配器代碼嗎? – Kanth

+0

@Appu:適配器中有很多東西。我無法顯示適配器代碼 –

+0

嗯,那很好。我曾問過,因爲要確保在調用notifyDataSetChanged()之前是否更改適配器中的數據。 – Kanth

回答

0
  1. 你應該在你的整個代碼中調用setAdapter()只有一次。
  2. 然後在您的適配器中添加一個方法,以在您想要添加更多數據或設置適配器項目時添加更多數據。

    public void addMoreData(List<String> newItems) { 
    this.list.addAll(newItems); 
    } 
    public void setList(List<String> newList) { 
    this.list = newList; 
    } 
    
  3. 呼叫notifyDataSetChanged()後設置新的列表,或添加更多的數據。