我正在开发一个应用程序(类似Twitter的),并且我的Feed是基于listview +适配器的。默认情况下,您将获得feed的前20个元素,当向下滚动并到达列表的末尾时,包含该视图的片段会向twitter发送请求以获取剩余的feed,一旦我们获取它们,我就会更新由适配器列出句柄并发送更改的数据通知。整个过程都可以,但是在列表的末尾却有一个。

当到达列表末尾并获得新列表时,最后一条推文将被复制,这意味着在我的供稿中,您有2倍相同的推文。

例如,您有以下提要:tweetA,tweetB,tweetC。到达tweetC时,我们要求发送旧的tweet,一旦收到,我就使用称为setData的方法将新列表提供给适配器,并请求更改通知数据集。但是当您获取列表并进行更新时,您会看到列表视图显示:

tweetA,tweetB,tweetC,tweetC,tweet D,tweetF

我以为它来自收到的新列表,而不是列表视图,并认为我可以删除新列表的第一个元素,但问题仍然存在,就我而言(删除第一个元素时),tweet D消失并显示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;
}


任何想法 ?

最佳答案

您可以使用HasHSet这样删除冗余

08-28 18:55