Android 列表视图图像重复

Android 列表视图图像重复,android,performance,android-listview,listviewitem,Android,Performance,Android Listview,Listviewitem,我已经搜索了这个bug并进行了优化。我也使用了Viewholder类和类似的方法,但仍然无法解决它。请不要将此标记为重复,因为我已经浏览了几乎所有的帖子,并且我也看到用户有相同的问题并且没有解决。谢谢你的帮助 问题:如标题所述;滚动时会重复post图像,但userimage不会重复。我不明白为什么它会重复 public class postListBaseAdapter extends BaseAdapter { private Context _context; privat

我已经搜索了这个bug并进行了优化。我也使用了Viewholder类和类似的方法,但仍然无法解决它。请不要将此标记为重复,因为我已经浏览了几乎所有的帖子,并且我也看到用户有相同的问题并且没有解决。谢谢你的帮助

问题:如标题所述;滚动时会重复post图像,但userimage不会重复。我不明白为什么它会重复

public class postListBaseAdapter extends BaseAdapter {

    private Context _context;
    private JSONArray dataSet;
    private LayoutInflater inflater;

    public postListBaseAdapter(Context context){
        _context = context;
        inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        try{
            dataSet = new JSONArray(postdetails.getpostlist());
        } catch (JSONException e) {
            dataSet = new JSONArray();
        } catch (Exception e) {
            dataSet = new JSONArray();
        }

    }

    public void changedata(){
        try {
            dataSet = new JSONArray(postdetails.getpostlist());
        } catch (JSONException e) {
            dataSet = new JSONArray();
        }
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return dataSet.length();
    }

    @Override
    public JSONObject getItem(int position) {
        try {
            return dataSet.getJSONObject(position);
        } catch (JSONException e) {
            return new JSONObject();
        }
    }

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

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

        final JSONObject jsob = getItem(position);
        final ViewHolder holder;

        if(convertView==null){
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.customview_postlist, null);
            holder.userimage = (ImageView) convertView.findViewById(R.id.userimage);
            holder.username = (TextView) convertView.findViewById(R.id.username);
            holder.uniqueid = (TextView) convertView.findViewById(R.id.useruniquename);
            holder.posts = (TextView) convertView.findViewById(R.id.posts);
            holder.remainingtime = (TextView) convertView.findViewById(R.id.remainingtime);
            holder.postimage = (ImageView) convertView.findViewById(R.id.post_image);
            holder.comments = (TextView) convertView.findViewById(R.id.comments);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        try {

            holder.comments.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Intent i = new Intent(_context, Commentpage.class);
                    try {
                        i.putExtra("post_id", jsob.getString("post_id"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    _context.startActivity(i);
                }
            });
            holder.username.setText(jsob.getString("name"));
            holder.uniqueid.setText(jsob.getString("username"));
            holder.posts.setText(jsob.getString("post"));
            String Scount = jsob.getString("comment_count");
            int count = Integer.parseInt(Scount);
            holder.comments.setText(jsob.getString("comment_count")+" Comment"+(count>1?"s":""));
            try{
                if(jsob.getString("user_image").equalsIgnoreCase("null")){
                    holder.userimage.setImageDrawable(_context.getResources().getDrawable(R.drawable.default_profile));
                }else{
                    Picasso.with(_context)
                     .load(postURLS.BASEURL+jsob.getString("user_image"))
                     .transform(new CircleTransform())
                     .placeholder(_context.getResources().getDrawable(R.drawable.default_profile))
                     .error(_context.getResources().getDrawable(R.drawable.default_profile))
                     .into(holder.userimage);
                }


            }catch(JSONException e){
                Log.i("first exception", e.toString());
                holder.userimage.setImageDrawable(_context.getResources().getDrawable(R.drawable.default_profile));
            }



            if(!jsob.getString("post_image").equalsIgnoreCase("null")){
                Picasso.with(_context)
                 .load(postURLS.BASEURL+jsob.getString("post_image"))
                 .placeholder(_context.getResources().getDrawable(R.drawable.placeholder_postimage))
                 .error(_context.getResources().getDrawable(R.drawable.placeholder_postimage))
                 .into(holder.postimage);
                holder.postimage.setVisibility(View.VISIBLE);
            }
            holder.postimage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Intent i = new Intent(_context, Commentpage.class);
                    try {
                        i.putExtra("post_id", jsob.getString("post_id"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    _context.startActivity(i);

                }
            });

            int time =0;
            if((time = Integer.parseInt(jsob.getString("remaningtime")))!=0){
                long calculatedtime = TimeUnit.SECONDS.toDays(time);
                if(calculatedtime > 0){
                    holder.remainingtime.setText(String.valueOf(calculatedtime)+"D left");
                }else if ((calculatedtime = TimeUnit.SECONDS.toHours(time))>0) {
                    holder.remainingtime.setText(String.valueOf(calculatedtime)+"h left");
                }else if((calculatedtime = TimeUnit.SECONDS.toMinutes(time))>0){
                    holder.remainingtime.setText(String.valueOf(calculatedtime)+"m left");
                }else if((calculatedtime = TimeUnit.SECONDS.toSeconds(time))>0){
                    holder.remainingtime.setText(String.valueOf(calculatedtime)+"s left");
                }
            }else{
                convertView.setVisibility(View.GONE);
                holder.remainingtime.setVisibility(View.INVISIBLE);
            }

            Handler mHandler = new Handler();
            mHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    OttoBusProvider.getInstance().post((int)position);
//                  produceDeleteEvent();
                }
            }, TimeUnit.SECONDS.toMillis(Integer.parseInt(jsob.getString("remaningtime"))));


        } catch (JSONException e) {
            Log.i("exception", "caught exception while creating convertview in postlist");
            Log.i("exception", e.toString());
            holder.username.setText(" ");

            holder.uniqueid.setText(" ");
            holder.posts.setText(" ");
            return convertView;
        }

        return convertView;

    }

    static class ViewHolder{

        private ImageView userimage;
        private TextView username;
        private TextView uniqueid;
        private TextView posts;
        private TextView remainingtime;
        private ImageView postimage;
        private TextView comments;

    }

这一行需要else语句来设置默认图像或其他任何内容:“if(!jsob.getString(“post_image”).equalsIgnoreCase(“null”)”如果为null,我不想显示该视图。。默认情况下,其可见性为“消失”。所以,只有当它不为null时,我才将is visibility设置为“VISIBLE”,这样就可以在else方法
setVisibility(View.GONE)中编写了谢谢,现在解决了这个问题,但是为什么会重复呢..因为