2016-08-02 19 views
1

私はアプリを開発しています(ツイッター風)、フィードはlistview +アダプターをベースにしています。デフォルトでは、フィードの最初の20要素が取得され、スクロールしてリストの最後に到達すると、ビューを含むフラグメントが残りのフィードを取得するためにtwitterにリクエストを送信し、取得するとすぐにアダプタによってハンドルをリストし、変更されたデータ通知を送信します。全体的なプロセスは機能しますが、リストの最後には表示されます。ArrayListリストビューの複製要素の表示

リストの最後に到達して新しいリストを取得すると、最後のつぶやきが複製されます。つまり、自分のフィードに同じツイートが2つあります。

たとえば、あなたはこのフィードを持っています:tweetA、tweetB、tweetC。 tweetCに到達すると、古いツイートを求めて受信した後、setDataというメソッドを使用して新しいリストをアダプタに渡し、通知データセットの変更をリクエストします。あなたは、リストや更新を取得するときには、あなたは、リストビュー表示中:

tweetA、tweetB、tweetC、tweetC、Dをつぶやき、tweetF

私はリストビューそれが受信した新しいリストから来るの思考とされなかったのと、

Feedfragment: はここ

私はちょうど新しいリストの最初の要素が、問題を取り除くことができることを考えて(最初の要素を削除するときに)私の場合には、残っている、Dが消えつぶやきおよびshow tweetFコードは次のとおりです。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.d(TAG, "inside onCreateView"); 


    View view = inflater.inflate(R.layout.twitter_swip_list,container, false); 
    mlistview = (ListView) view.findViewById(R.id.listview) ; 
    TwitterTimeLines twitt = new   TwitterTimeLines(mActivity,TwitterHomeActivity.getTwitterHandler()); 
     twitt.getTimeline(handler);  return view; 
} 

ハンドラは、Twitterからの結果を取り戻すために使用され

private final Handler handler = new Handler() { 
    @Override 
    public void handleMessage(android.os.Message msg) { 
     ArrayList<Status> status = (ArrayList<Status>) msg.obj ; 
     mStatus = status; 
     mTwitterFeedAdapter.setData (mStatus); 
     mTwitterFeedAdapter.notifyDataSetChanged(); 
     } 
    } 
} ; 

アダプタ:

public View getView(final int position, View convertView, ViewGroup parent) { 
    Log.d(TAG,"position"+position) ; 
    mPosition = position; 

    mViewHolder = new TweetViewHolder(mActivity); 

    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ; 

    if(convertView == null) { 
     convertView = mInflater.inflate(R.layout.twitter_feed,null) ; 
     mViewHolder.userProfilePicture = (ImageView) convertView.findViewById(R.id.profileImg) ; 
     mViewHolder.userRealName = (TextView) convertView.findViewById(R.id.userName) ; 
     .... 
     convertView.setTag(mViewHolder) ; 
    } 
    else { 
     mViewHolder = (TweetViewHolder) convertView.getTag() ; 
    } 
    /* detect end of the list and request old tweets*/ 
    if(position >= mStatus.size() - 1){ 
     mTweetFeedFragment.populateOldTimeLine(); 

    /* both classes are used to extract data and put it in a easy 
    user format */ 
    mTweetMediaInfo = new TweetMediaInfo(mStatus.get(position)); 
    mTweetInfo = new TweetInfo(mStatus.get(position)); 

    showTweetContent(); 

    return convertView ; 

} 

public void setData(ArrayList<Status> status){ 
    mStatus = status; 
} 

任意のアイデア?

答えて

2

あなたはredudancey

list = new ArrayList<String>(new LinkedHashSet<String>(list)) 
を除去するために、このようにHashSetのを使用することができます
関連する問題