2016-05-26 3 views
1

Я новичок в java Так что я сожалею, если смущу вас с моим вопросом.Fetch TweetTimelineListAdapter's data

Моя проблема в том, что я получаю список твитов через TweetTimelineListAdapter adapter и показывать данные в listview как это

final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(this) 
       .setTimeline(userTimeline) 
       .build(); 
setListAdapter(adapter); 

Все работает хорошо, но я хочу, чтобы получить (см) данные внутри adapter , Я вижу только твиты в listview.
Мне нужно поместить данные адаптера в массив для дальнейшего использования через MainActivity.

Есть ли способ сделать это или любые предложения, которые вы можете дать.

+0

'getItem (int position)'? – pskink

+0

Можете ли вы дать правильный код, когда я отправляюсь на adaper, он показывает ошибки. Я имею в виду то, что я должен использовать вместо позиции int. – Atula

+0

какие ошибки? просто вызовите метод 'adapter.getItem()' – pskink

ответ

0

Как правило, в Android каждый класс адаптер предоставляет Вам следующие методы:

public int getCount(); 
public T getItem(int position); 

Так вы пользователи могут получить все данные из класса адаптера следующим образом:

ArrayList<T> data= new ArrayList<T>(); 
for(int i= 0; i < adapter.getCount(); i++) { 
    data.add(adapter.getItem(i)); 
} 

Так что в вашем случае :

Это должен быть код для TweetTimelineListAdapter, взятый из этого github url

package com.twitter.sdk.android.tweetui; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 

import com.twitter.sdk.android.core.Callback; 
import com.twitter.sdk.android.core.Result; 
import com.twitter.sdk.android.core.TwitterException; 
import com.twitter.sdk.android.core.models.Tweet; 
import com.twitter.sdk.android.tweetui.internal.TimelineDelegate; 

/** 
* TweetTimelineListAdapter is a ListAdapter which can provide Timeline Tweets to ListViews. 
*/ 
public class TweetTimelineListAdapter extends TimelineListAdapter<Tweet> { 
    protected Callback<Tweet> actionCallback; 
    final protected int styleResId; 

    /** 
    * Constructs a TweetTimelineListAdapter for the given Tweet Timeline. 
    * @param context the context for row views. 
    * @param timeline a Timeline&lt;Tweet&gt; providing access to Tweet data items. 
    * @throws java.lang.IllegalArgumentException if timeline is null 
    */ 
    public TweetTimelineListAdapter(Context context, Timeline<Tweet> timeline) { 
     this(context, timeline, R.style.tw__TweetLightStyle, null); 
    } 

    TweetTimelineListAdapter(Context context, Timeline<Tweet> timeline, int styleResId, 
      Callback<Tweet> cb) { 
     this(context, new TimelineDelegate<>(timeline), styleResId, cb); 
    } 

    TweetTimelineListAdapter(Context context, TimelineDelegate<Tweet> delegate, int styleResId, 
      Callback<Tweet> cb) { 
     super(context, delegate); 
     this.styleResId = styleResId; 
     this.actionCallback = new ReplaceTweetCallback(delegate, cb); 
    } 

    /** 
    * Returns a CompactTweetView by default. May be overridden to provide another view for the 
    * Tweet item. If Tweet actions are enabled, be sure to call setOnActionCallback(actionCallback) 
    * on each new subclass of BaseTweetView to ensure proper success and failure handling 
    * for Tweet actions (favorite, unfavorite). 
    */ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     final Tweet tweet = getItem(position); 
     if (rowView == null) { 
      final BaseTweetView tv = new CompactTweetView(context, tweet, styleResId); 
      tv.setOnActionCallback(actionCallback); 
      rowView = tv; 
     } else { 
      ((BaseTweetView) rowView).setTweet(tweet); 
     } 
     return rowView; 
    } 

    /* 
    * On success, sets the updated Tweet in the TimelineDelegate to replace any old copies 
    * of the same Tweet by id. 
    */ 
    static class ReplaceTweetCallback extends Callback<Tweet> { 
     TimelineDelegate<Tweet> delegate; 
     Callback<Tweet> cb; 

     ReplaceTweetCallback(TimelineDelegate<Tweet> delegate, Callback<Tweet> cb) { 
      this.delegate = delegate; 
      this.cb = cb; 
     } 

     @Override 
     public void success(Result<Tweet> result) { 
      delegate.setItemById(result.data); 
      if (cb != null) { 
       cb.success(result); 
      } 
     } 

     @Override 
     public void failure(TwitterException exception) { 
      if (cb != null) { 
       cb.failure(exception); 
      } 
     } 
    } 

    /** 
    * TweetTimelineListAdapter Builder 
    */ 
    public static class Builder { 
     private Context context; 
     private Timeline<Tweet> timeline; 
     private Callback<Tweet> actionCallback; 
     private int styleResId = R.style.tw__TweetLightStyle; 

     /** 
     * Constructs a Builder. 
     * @param context Context for Tweet views. 
     */ 
     public Builder(Context context) { 
      this.context = context; 
     } 

     /** 
     * Sets the Tweet timeline data source. 
     * @param timeline Timeline of Tweets 
     */ 
     public Builder setTimeline(Timeline<Tweet> timeline) { 
      this.timeline = timeline; 
      return this; 
     } 

     /** 
     * Sets the Tweet view style by resource id. 
     * @param styleResId resource id of the Tweet view style 
     */ 
     public Builder setViewStyle(int styleResId) { 
      this.styleResId = styleResId; 
      return this; 
     } 

     /** 
     * Sets the callback to call when a Tweet action is performed on a Tweet view. 
     * @param actionCallback called when a Tweet action is performed. 
     */ 
     public Builder setOnActionCallback(Callback<Tweet> actionCallback) { 
      this.actionCallback = actionCallback; 
      return this; 
     } 

     /** 
     * Builds a TweetTimelineListAdapter from Builder parameters. 
     * @return a TweetTimelineListAdpater 
     */ 
     public TweetTimelineListAdapter build() { 
      return new TweetTimelineListAdapter(context, timeline, styleResId, actionCallback); 
     } 
    } 
} 

Вы используете его, как показано ниже:

final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(this) 
       .setTimeline(userTimeline) 
       .build(); 
setListAdapter(adapter); 

Здесь TweetTimelineListAdapter расширяет TimelineListAdapter

и TimelineListAdapter расширяет BaseAdapter

И BaseAdapter класс имеют следующие methods:

public int getCount(); 
public T getItem(int position); 

так что вы можете получить все данные из TweetTimelineListAdapter следующим образом:

ArrayList<Tweet> tweets = new ArrayList<Tweet>(); 
for(int i= 0; i<adapter.getCount();i++) { 
    tweets.add(adapter.getItem(i)); 
} 

Здесь вы будете иметь все твиты от TweetTimelineListAdapter в ваш ArrayList.

+0

получение adapter.getCount() '0'. Но у меня есть твиты в списке. – Atula

+0

поэтому петля не звонит. – Atula

+0

@ Атула, если это так, как вам нужно расширить приложение TweetTimelineListAdapter в вашем приложении и необходимо переопределить метод getCount(), чтобы вернуть действительный счетчик. –

-1

Вы должны сделать так, что, как это:

List<Tweet> tweets = new ArrayList<>(); 
int count = adapter.getCount(); 
for (int i=0;i<count;i++) { 
    tweets.add(adpater.getItem(i);); 
} 

Я предполагаю, что объекты, возвращаемые получить пункт называется Tweet (никогда не использовал его).