2013-08-02 76 views
0

我创建了ListView,并且我能够静态填写列表(它工作正常),但我无法做到动态地,..在加载列表后,似乎没有什么后,这里是代码:动态填充android listview

list = new ArrayList<String>(); 
     arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, list); 
       listtwitt.setAdapter(arrayAdapter); 
       TwitAsyncTask twitAsync = new TwitAsyncTask(); 
       twitAsync.execute(); 
    } 
    @SuppressLint("NewApi") 
    private class TwitAsyncTask extends AsyncTask<Void, Void, Void>{  
     private ProgressDialog progressDialo; 
     @Override 
     protected void onPreExecute() { 
      progressDialo = ProgressDialog.show(SocialNetwork.this, "", "En cours..."); 
      super.onPreExecute();} 

     @Override 
     protected Void doInBackground(Void... params) { 
      final Query query = new Query(); 
       query.setQuery("%23morocco"); 
      QueryResult result; 
      try { 
       result = twitter.search(query); 
       for (twitter4j.Status status : result.getTweets()) { 
          String stat = "@" + status.getUser().getScreenName() + ":" + status.getText() +":"+status.getGeoLocation() +":"+status.getCreatedAt(); 
          list.add("tweet"); 
          Log.i(""," tweeeeeeet"+stat); 
          Log.i("","list doInBack"+list.isEmpty()); 

        } 
      } catch (TwitterException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
         return null; 
     } 
     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      progressDialo.dismiss(); 
      arrayAdapter.clear(); 
      arrayAdapter.addAll(SocialNetwork.list); 
      arrayAdapter.notifyDataSetChanged(); 
     } 

任何帮助:)

+1

您是否想要在有新数据时刷新推文? –

+0

不,列表通常是空的:/ –

回答

0

只是把我的头编码的StackOverflow上顶:

new TwitAsyncTask(this, tweetListener).execute(); 

private OnTweetsLoadedListener tweetListener = new OnTweetsLoadedListener { 
    @Override 
    public void onTweetsLoaded(List<String> tweets) { 
      arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tweets); 
      listview.setAdapter(arrayAdapter);  
    } 
}  

private static class TwitAsyncTask extends AsyncTask<Void, Void, List<String>>{  

    private final Context context; 
    private final OnTweetsLoadedListener listener; 
    private ProgressDialog progressDialo; 

    public interface OnTweetsLoadedListener() { 
     void onTweetsLoaded(List<String> tweets); 
    } 

    public TwitAsyncTask(Context context, OnTweetsLoadedListener listener) { 
     this.context = context; 
     this.listener = listener; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialo = ProgressDialog.show(context, "", "En cours..."); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     List<String> tweets = new ArrayList<String>(); 
     try { 
      Query query = new Query(); 
      query.setQuery("%23morocco"); 
      QueryResult result = twitter.search(query); 
      for (twitter4j.Status status : result.getTweets()) { 
       String stat = "@" + status.getUser().getScreenName() + ":" + status.getText() +":"+status.getGeoLocation() +":"+status.getCreatedAt(); 
       tweets.add(stat); 
        Log.i("TAG"," tweeeeeeet"+stat); 
      } 
     } catch (TwitterException e) { 
      Log.e("TAG", "ASyncFail", e); 
     } 
     Log.i("TAG","done"); 
     return tweets; 
    } 

    @Override 
    protected void onPostExecute(List<String> tweets) { 
     super.onPostExecute(result); 
     progressDialo.dismiss(); 
     if(listener != null) { 
      listener.onTweetsLoaded(tweets); 
     } 
    } 

如果你有这个代码的问题,那就意味着您错误地使用Twitter4J库

+0

是OnTweetsLoadedListener预定义的吗? (对于已发表的评论感到抱歉) –

+0

其定义为您的TwitASyncTask中的内听者 – Blundell

+0

推文显示在控制台中,而不是在listview中:/ –