我正在開發一個應用程序(類似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;
}
任何想法?