-1

我一直在阅读 Viewholders for listview 的好处是它们可以帮助提高 listview 滚动的性能。我一直在尝试为我的 CustomAdapter 实现它,但似乎我在某处做错了(不断崩溃)。那么我该如何在我的自定义适配器中实现一个视图?

                    @Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        convertView = myInflater.inflate(R.layout.activity_list_view,
                parent, false);
    } else {
        convertView = myInflater.inflate(R.layout.activity_list_view,
                parent, false);
    }
    TextView name = (TextView) convertView.findViewById(R.id.feed_post);
    final String isLiked;
    TextView date = (TextView) convertView.findViewById(R.id.duration);
    HashMap<String, String> Item = new HashMap<String, String>();
    ImageView image = (ImageView) convertView.findViewById(R.id.comments);
    ImageView image_thumbs = (ImageView) convertView
            .findViewById(R.id.thumbs);
    Item = arrayList.get(position);
    // Get the time
    time = Item.get("Time");
    // Break up the time
    new_time = time.split("T")[0];
    isLiked = Item.get("Liked");
    // Split more
    get_splitted_time = new_time.split("-");
    // Get the month
    Year = get_splitted_time[0];
    Day = get_splitted_time[2];
    if (isLiked == null || isLiked == "false") {
        image_thumbs.setImageDrawable(convertView.getResources()
                .getDrawable(R.drawable.thumbsup_liked_new_flattened));
    }
    if (isLiked == "true") {
        image_thumbs
                .setImageDrawable(convertView.getResources().getDrawable(
                        R.drawable.thumbsup_liked_state_new_flattened));
    }
    if (get_splitted_time[1].startsWith("0")) {
        Month = months[Integer.valueOf(get_splitted_time[1].substring(1)) - 1];
    } else {
        Month = months[Integer.valueOf(get_splitted_time[1]) - 1];
    }
    image_thumbs.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isLiked == "true") {
                ;
                HashMap<String, String> Item = new HashMap<String, String>();
                Item = arrayList.get(position);
                Item.put("Liked", "false");
                unlikePost(feed_item_post_id.get(position));
            }
            CustomAdapter.this.notifyDataSetChanged();
        }
    });
    // Onclick listener for comments
    image.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(context, SinglePost.class);
            myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            myIntent.putExtra("post_id", feed_item_post_id.get(position));
            myIntent.putExtra("liked", true);
            myIntent.putExtra("position", 0);
            context.startActivity(myIntent);

        }
    });
    final_time = Day + " " + Month + " " + Year;
    name.setText(Item.get("Message"));
    date.setText(final_time);
    return convertView;
}
4

2 回答 2

0

有一个非常好的关于列表的教程,来自一个叫做 lars vogel 的人。其中一部分是持有人模式。这是直接链接:

http://www.vogella.com/tutorials/AndroidListView/article.html#adapterperformance_holder

在这个网站上,你会发现关于几乎任何东西的很棒的 android 教程。我强烈推荐该网站。如果您在阅读教程中的段落后仍然对持有人有疑问......只需在此处写评论。

干杯!

于 2014-06-04T08:14:07.687 回答
0

这是一个关于如何实现 ViewHolder 的示例。
只是给你一点提示。

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

        if (convertView == null) {
            convertView = myInflater.inflate(R.layout.activity_list_view,
                    parent, false);
              ViewHolder holder = new ViewHolder();
              holder.name = (TextView) convertView.findViewById(R.id.feed_post);
              holder.date = (TextView) convertView.findViewById(R.id.duration);
              holder.image = (ImageView) convertView.findViewById(R.id.comments);
              convertView.setTag(holder); // dont forget this one

        } else {
            holder = (ViewHolder) convertView.getTag(); // recycle
        }

    ....
    // how to use it
        holder.name.setText(Item.get("Message"));
        holder.date.setText(final_time);
        return convertView;


    }

// define your holder class
        private static class ViewHolder{
            TextView name;
            TextView date;
            ImageView image;
        }
于 2014-06-04T08:20:36.787 回答