2013-08-02 3 views
0

Создаю ListView, и я могу заполнить список статически (он хорошо работает), но я не могу сделать это Динамически, после загрузки списка с твитами каналов После того, как ничего не появляется, вот код:динамически заполнять список виджетов Android

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

Твиты отображаются в консоли, а не в списке: / –

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