转换视图不一致

时间:2017-01-02 04:10:39

标签: listview baseadapter getview convertview

使用convertview的循环逻辑的扩展baseadapter导致列表项TextView setText方法在滚动视图关闭屏幕然后返回后在listview中被调用两次(覆盖文本)。每次调用getview时对convertview进行充气都会消除此问题。任何帮助将不胜感激。

adapter = new BaseAdapter() {
            @Override
            public int getCount() {
                return comments.length();
            }

            @Override
            public JSONObject getItem(int i) {
                try {
                    return comments.getJSONObject(i);
                } catch (JSONException e) {
                    logger.e(String.valueOf(e));
                    return new JSONObject();
                }
            }

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

            @Override
            public int getViewTypeCount() {
                return 2;
            }

            @Override
            public View getView(final int i, View convertView, final ViewGroup parent) {
                Holder holder;
                if(convertView==null){
                    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.comment_row_layout, parent, false);
                    holder = new Holder(convertView);
                    convertView.setTag(holder);
                }else{
                    holder = (Holder) convertView.getTag();
                }
                try {
                    JSONObject entry = this.getItem(i);
                    holder.profileName.setText(entry.getString("title"));
                    final String facebookUrl = entry.getString("profileLink");
                    holder.profileName.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            context.sendBroadcast(new Intent("vibrate"));
                            try {
                                int versionCode = context.getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
                                if (versionCode >= 3002850) {
                                    Uri uri = Uri.parse("fb://facewebmodal/f?href=" + facebookUrl);
                                    startActivity(new Intent(Intent.ACTION_VIEW, uri));
                                } else {
                                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/336227679757310")));
                                }
                            } catch (PackageManager.NameNotFoundException e) {
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl)));
                            }
                        }
                    });

                    Glide.with(comment_dialog_fragment.this).load(entry.getString("pictureLink")).into(holder.profilePic);
                    final int reply_int = entry.getInt("replies");
                    if (reply_int != 0) holder.replies.setText(reply_int + " Replies");
                    switch (entry.getString("type")) {
                        case "text":
                            TextView textView = new TextView(context);
                            textView.setTextColor(Color.WHITE);
                            textView.setGravity(Gravity.LEFT);
                            textView.setText(entry.getString("content"));
                            holder.frame.addView(textView);
                            break;
                        case "image":
                            final String imageLink = SITE_URL + entry.getString("content");
                            RoundedImageView imageView = new RoundedImageView(context);
                            imageView.setScaleType(ImageView.ScaleType.FIT_START);
                            imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                            holder.frame.addView(imageView);
                            Glide.with(comment_dialog_fragment.this).load(imageLink).into(imageView);
                            imageView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    context.sendBroadcast(new Intent("vibrate"));
                                    Intent open = new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.parse(imageLink), "image/*");
                                    if (open.resolveActivity(context.getPackageManager()) != null) {
                                        startActivity(open);
                                    }
                                }
                            });
                            break;
                    }
                } catch (JSONException e) {
                    logger.e(String.valueOf(e));
                }
                return convertView;
            }
        };

    private class Holder {
        TextView profileName, replies;
        RoundedImageView profilePic;
        FrameLayout frame;

        Holder(View v) {
            profileName = (TextView) v.findViewById(R.id.profile_name);
            frame = (FrameLayout) v.findViewById(R.id.content);
            replies = (TextView) v.findViewById(R.id.replies);
            profilePic = (RoundedImageView) v.findViewById(R.id.profile_pic);
        }
    }

0 个答案:

没有答案