2013-05-21 180 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()后设置新的列表,或添加更多的数据。