Android ListView在单击项目时复制

Android ListView在单击项目时复制,android,listview,listadapter,Android,Listview,Listadapter,我的listview有问题。事实上,我已经实现了类似Facebook的订阅源 从MySQL数据库中获取数据。在每个列表项的底部,我都有一个来自这个库的Like按钮。我的问题是,当我在第一个列表项上单击“喜欢”时,第五个列表项会自动被喜欢,如果我单击第二个列表项,第四个列表项会被喜欢,依此类推。我尽了我所能,但没有解决这个问题。我试图将视图持有者也添加到我的列表适配器类中,正如在这里回答的各种问题中所建议的那样,但它并没有解决我的问题。请帮忙!下面是我的适配器类: public class Fe

我的listview有问题。事实上,我已经实现了类似Facebook的订阅源 从MySQL数据库中获取数据。在每个列表项的底部,我都有一个来自这个库的Like按钮。我的问题是,当我在第一个列表项上单击“喜欢”时,第五个列表项会自动被喜欢,如果我单击第二个列表项,第四个列表项会被喜欢,依此类推。我尽了我所能,但没有解决这个问题。我试图将视图持有者也添加到我的列表适配器类中,正如在这里回答的各种问题中所建议的那样,但它并没有解决我的问题。请帮忙!下面是我的适配器类:

 public class FeedListAdapter extends BaseAdapter {
    private Activity activity;

    private int lastPosition = -1;
    private DatabaseHandler db;
    ViewHolder holder;
      int id = 0;
    String email;

    private List<FeedItem> feedItems;

    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
        this.activity = activity;
        this.feedItems = feedItems;
    }

    @Override
    public int getCount() {
        return feedItems.size();
    }

    @Override
    public Object getItem(int location) {
        return feedItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {



        if (convertView == null){
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.feed_item, parent,false);
            holder = new ViewHolder();
            holder.materialFavoriteButtonNice =
                    (MaterialFavoriteButton) convertView.findViewById(R.id.like_anim);
            convertView.setTag(holder);
        }else{

            holder = (ViewHolder)convertView.getTag();
        }

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();


            TextView name = (TextView) convertView.findViewById(R.id.name);
            TextView timestamp = (TextView) convertView
                    .findViewById(R.id.timestamp);
            //get User Email
            db = new DatabaseHandler(activity.getApplication());
            db = new DatabaseHandler(activity.getApplication());
            HashMap<String, String> user = db.getUserDetails();
            email = user.get("email").toString();
            // End get User Email ID for sending it to db

        //Getting Views from Layout


        TextView statusMsg = (TextView) convertView
                .findViewById(R.id.txtStatusMsg);
        TextView url = (TextView) convertView.findViewById(R.id.txtUrl);
        final TextView like = (TextView) convertView.findViewById(R.id.like_box_no);
        TextView share = (TextView) convertView.findViewById(R.id.share_no);
        TextView comment = (TextView) convertView.findViewById(R.id.comment_no);
        NetworkImageView profilePic = (NetworkImageView) convertView
                .findViewById(R.id.profilePic);

        FeedImageView feedImageView = (FeedImageView) convertView
                .findViewById(R.id.feedImage1);
        //End Getting Views from Layout

        final FeedItem item = feedItems.get(position);
        name.setText(item.getName());

        // Converting timestamp into x ago format
        CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
                Long.parseLong(item.getTimeStamp()),
                System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
        timestamp.setText(timeAgo);

        // Check for empty status message
        if (!TextUtils.isEmpty(item.getStatus())) {
            statusMsg.setText(item.getStatus());
            statusMsg.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            statusMsg.setVisibility(View.GONE);
        }
        // Chcek for empty Like
        if (!TextUtils.isEmpty(item.getLike())) {
            like.setText(item.getLike());
            like.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            like.setText("0");
        }
        // Chcek for empty Comment
        if (!TextUtils.isEmpty(item.getComment())) {
            comment.setText(item.getComment());
            comment.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            comment.setText("0");
        }
        // Chcek for empty Share
        if (!TextUtils.isEmpty(item.getShare())) {
            share.setText(item.getShare());
            share.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            share.setText("0");
        }
        if (item.getFav().equals("1")) {
            holder.materialFavoriteButtonNice.setFavorite(true, false);
            holder.materialFavoriteButtonNice.setVisibility(View.VISIBLE);

        } else {
            // status is empty, remove from view
            holder.materialFavoriteButtonNice.setFavorite(false, false);
        }

        // Checking for null feed url
        if (item.getUrl() != null) {
            url.setText(Html.fromHtml("<a href=\"" + item.getUrl() + "\">"
                    + item.getUrl() + "</a> "));

            // Making url clickable
            url.setMovementMethod(LinkMovementMethod.getInstance());
            url.setVisibility(View.VISIBLE);
        } else {
            // url is null, remove from the view
            url.setVisibility(View.GONE);
        }

        // user profile pic
        profilePic.setImageUrl(item.getProfilePic(), imageLoader);
        imageLoader.get(item.getProfilePic(), ImageLoader.getImageListener(profilePic, R.drawable._businessman, R.drawable._businessman));

        // Feed image
        if (item.getImge() != null) {
            feedImageView.setImageUrl(item.getImge(), imageLoader);
            feedImageView.setVisibility(View.VISIBLE);
            feedImageView
                    .setResponseObserver(new FeedImageView.ResponseObserver() {
                        @Override
                        public void onError() {
                        }

                        @Override
                        public void onSuccess() {
                        }
                    });
        } else {
            feedImageView.setVisibility(View.GONE);
        }

        //Animating the List View
        Animation animation = AnimationUtils.loadAnimation(activity.getApplication(), (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
        convertView.startAnimation(animation);
        lastPosition = position;
        //End Animating the List View

        //onClick Like


holder.materialFavoriteButtonNice.setOnFavoriteChangeListener(new MaterialFavoriteButton.OnFavoriteChangeListener() {
    @Override
    public void onFavoriteChanged(MaterialFavoriteButton buttonView, boolean favorite) {
        id = item.getId();
        Log.d("inFavChngeListner", "Clickd" + item.getId());
        Toast.makeText(activity.getApplication(), "Fav Changed : " + item.getId(), Toast.LENGTH_SHORT).show();
        if (favorite) {


            new send_json().execute();

        } else {

            holder.materialFavoriteButtonNice.setFavorite(false, true);
            new send_json_unlike().execute();
        }
    }
});
        return convertView;


    }
     static class ViewHolder {
        MaterialFavoriteButton materialFavoriteButtonNice;
    }

    //Sending Likes with email id and feed id to Remote Mysql Db
    public class send_json extends AsyncTask<String, String, JSONObject> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            if(!holder.materialFavoriteButtonNice.isFavorite())
            holder.materialFavoriteButtonNice.setFavorite(true, true);
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            UserFunctions userFunction = new UserFunctions();

            JSONObject json = userFunction.like_func(email, String.valueOf(id));
            Log.d("BG Like, Email:" + email + "Id: " + String.valueOf(id), json.toString());
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
if(!holder.materialFavoriteButtonNice.isFavorite())
            holder.materialFavoriteButtonNice.setFavorite(true, true);
        }
    }
    //Sending Likes with email id and feed id to Remote Mysql Db
    public class send_json_unlike extends AsyncTask<String, String, JSONObject> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            if(!holder.materialFavoriteButtonNice.isFavorite())
                holder.materialFavoriteButtonNice.setFavorite(false, true);
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            UserFunctions userFunction = new UserFunctions();

            JSONObject json = userFunction.unlike_func(email, String.valueOf(id));
            Log.d("BG UnLike, Email:" + email + "Id: " + String.valueOf(id), json.toString());
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
            if(!holder.materialFavoriteButtonNice.isFavorite())
                holder.materialFavoriteButtonNice.setFavorite(false, true);
        }
    }
}
公共类FeedListAdapter扩展了BaseAdapter{
私人活动;
private int lastPosition=-1;
专用数据库处理程序数据库;
视窗座;
int id=0;
字符串电子邮件;
私人物品清单;
ImageLoader ImageLoader=AppController.getInstance().getImageLoader();
公共FeedListAdapter(活动,列出feedItems){
这个。活动=活动;
此项。feedItems=feedItems;
}
@凌驾
public int getCount(){
返回feedItems.size();
}
@凌驾
公共对象getItem(int位置){
返回feedItems.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
if(convertView==null){
LayoutFlater充气机=(LayoutFlater)活动
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.feed_项,父项,false);
holder=新的ViewHolder();
支架材料旋涡按钮=
(MaterialFavoriteButton)convertView.findViewById(R.id.like_anim);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
如果(imageLoader==null)
imageLoader=AppController.getInstance().getImageLoader();
TextView name=(TextView)convertView.findViewById(R.id.name);
TextView时间戳=(TextView)convertView
.findviewbyd(R.id.时间戳);
//获取用户电子邮件
db=新的DatabaseHandler(activity.getApplication());
db=新的DatabaseHandler(activity.getApplication());
HashMap user=db.getUserDetails();
email=user.get(“email”).toString();
//最终获取发送给db的用户电子邮件ID
//从布局中获取视图
TextView statusMsg=(TextView)convertView
.findViewById(R.id.txtStatusMsg);
TextView url=(TextView)convertView.findViewById(R.id.txtrl);
final TextView like=(TextView)convertView.findViewById(R.id.like\u框号);
TextView共享=(TextView)convertView.findViewById(R.id.share\u no);
TextView注释=(TextView)convertView.findViewById(R.id.comment\u no);
NetworkImageView配置文件PIC=(NetworkImageView)convertView
.findviewbyd(R.id.profilePic);
FeedImageView FeedImageView=(FeedImageView)convertView
.findViewById(R.id.feedImage1);
//结束从布局中获取视图
最终饲料项目=饲料项目。获取(位置);
name.setText(item.getName());
//将时间戳转换为x ago格式
CharSequence timeAgo=DateUtils.getRelativeTimeSpanString(
Long.parseLong(item.getTimeStamp()),
System.currentTimeMillis(),DateUtils.SECOND(单位:毫秒);
timestamp.setText(timeAgo);
//检查空状态消息
如果(!TextUtils.isEmpty(item.getStatus())){
statusMsg.setText(item.getStatus());
statusMsg.setVisibility(View.VISIBLE);
}否则{
//状态为空,请从视图中删除
statusMsg.setVisibility(View.GONE);
}
//Chcek适用于空类
如果(!TextUtils.isEmpty(item.getLike())){
like.setText(item.getLike());
like.setVisibility(View.VISIBLE);
}否则{
//状态为空,请从视图中删除
like.setText(“0”);
}
//用于空注释的Chcek
如果(!TextUtils.isEmpty(item.getComment())){
comment.setText(item.getComment());
comment.setVisibility(View.VISIBLE);
}否则{
//状态为空,请从视图中删除
注释.setText(“0”);
}
//空份额的Chcek
如果(!TextUtils.isEmpty(item.getShare())){
share.setText(item.getShare());
share.setVisibility(View.VISIBLE);
}否则{
//状态为空,请从视图中删除
share.setText(“0”);
}
if(item.getFav()等于(“1”)){
holder.materialFavoriteButtonNice.setFavorite(真、假);
支架.材料涡流按钮.设置可见性(视图.可见);
}否则{
//状态为空,请从视图中删除
holder.materialFavoriteButtonNice.setFavorite(假,假);
}
//正在检查空提要url
if(item.getUrl()!=null){
url.setText(Html.fromHtml(“”);
//使url可点击
setMovementMethod(LinkMovementMethod.getInstance());
setVisibility(View.VISIBLE);
}否则{
//url为空,请从视图中删除
setVisibility(View.GONE);
}
//用户档案图片
profilePic.setImageUrl(item.getProfilePic(),imageLoader);
get(item.getProfilePic(),imageLoader.getImageListener(profilePic,R.drawable.\u-businesser,R.drawable.\u-businesser));
//馈送图像
if(item.getImge()!=null){
feedImageView.setImageUrl(item.getImge(),imageLo