2016-08-02 59 views
1

我正在開發一個應用程序(類似twitter),我的提要基於listview +適配器。默認情況下,您會獲取Feed的20個第一個元素,當向下滾動併到達列表的末尾時,包含該視圖的片段會向Twitter發送請求以獲取剩餘的Feed,並且只要我們獲得它們,我就會更新通過適配器列出句柄併發送更改的數據通知。整個過程的工作,但我得到了一個,但在列表的末尾。ArrayList重複元素在列表視圖中顯示

當到達列表末尾並獲取新列表時,最後一條推文被複制,這意味着在我的Feed中您有兩次相同的推文。

例如,您有此供稿:tweetA,tweetB,tweetC。當到達tweetC時,我們要求輸入舊的推文,一旦收到,我使用setData方法將新列表提供給適配器,並請求通知數據集更改。但是當你得到的名單和更新,您可以看到列表視圖顯示:

tweetA,tweetB,tweetC,tweetC,鳴叫d,tweetF

我想它來自新的列表來獲得,而不是ListView和以爲我可以只刪除第一個元素的新名單,但問題依然存在,在我的情況(除去第一元素時),鳴叫d消失,顯示tweetF

這裏是代碼:

Feedfragment:

@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

您可以使用HashSet的這樣去除redudancey

list = new ArrayList<String>(new LinkedHashSet<String>(list))