私はアプリを開発しています(ツイッター風)、フィードは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;
}
任意のアイデア?