具有Viewholder和复选框状态保存的ListView

Xmstr

简单的购物清单应用程序。ListView(带有自定义适配器的TextView + CheckBox。试图实现viewHolder模式并完全丢失。对吗?请检查我的代码。还要如何保存复选框状态?我创建了大量但不知道如何实现的方法(滚动bug时取消选中)。

适配器:

public class ShopAdapter extends BaseAdapter {
private Context mainContex;
private ArrayList<ShopItem> shopItems;
boolean[] checkBoxState = new boolean[shopItems.size()];

static class ViewHolder {
    CheckBox checkBox;
    TextView textView;
}

public ShopAdapter(Context mainContex, ArrayList<ShopItem> shopItems) {
    this.mainContex = mainContex;
    this.shopItems = shopItems;
}

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

@Override
public Object getItem(int position) {
    return shopItems.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ShopItem shopItem = shopItems.get(position);
    View item = convertView;
    if (item == null) {

        item = LayoutInflater.from(mainContex).inflate(R.layout.shoplist_item, null);

        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.textView = (TextView) item.findViewById(R.id.itemTextView);
        viewHolder.checkBox = (CheckBox) item.findViewById(R.id.doneCheckBox);
        viewHolder.textView.setText(shopItem.getDescription());
        viewHolder.checkBox.setChecked(shopItem.isDone());
        viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    shopItem.setDone(true);
                    viewHolder.textView.setTextColor(mainContex.getResources()
                            .getColor(R.color.done_text_color));
                } else {
                    shopItem.setDone(false);
                    viewHolder.textView.setTextColor(mainContex.getResources()
                            .getColor(R.color.secondary_text));
                }
            }
        });
        item.setTag(viewHolder);
        viewHolder.checkBox.setTag(shopItems.get(position));
    } else {
        item = convertView;
        ((ViewHolder) item.getTag()).checkBox.setTag(shopItems.get(position));
    }
    ViewHolder holder = (ViewHolder) item.getTag();
    holder.textView.setText(shopItems.get(position).getDescription());
    holder.checkBox.setChecked(shopItems.get(position).isDone());
    return item;
}

}

物品:

public class ShopItem {

private String description;
private boolean done;

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public boolean isDone() {
    return done;
}

public void setDone(boolean done) {
    this.done = done;
}

}

Android开发人员

这是您的代码的正确实现-

    private static class ViewHolder {
                CheckBox checkBox;
                TextView textView;
            }

            public ShopAdapter(Context mainContex, ArrayList<ShopItem> shopItems) {
                this.mainContex = mainContex;
                this.shopItems = shopItems;
            }

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

            @Override
            public Object getItem(int position) {
                return shopItems.get(position);
            }

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                final ShopItem shopItem = shopItems.get(position);
                ViewHolder viewHolder;
            if (convertView == null) { 
                    viewHolder = new ViewHolder();

                    LayoutInflater layoutInflater = LayoutInflater.from(mContext);
                    convertView = layoutInflater.inflate(R.layout.shoplist_item, null);

                    viewHolder.textView = (TextView) item.findViewById(R.id.itemTextView);
                    viewHolder.checkBox = (CheckBox) item.findViewById(R.id.doneCheckBox);

            convertView.setTag(viewHolder);

        }
             else 
           {                
          viewHolder = (ViewHolder) convertView.getTag();
           }
viewHolder.checkBox.setTag(shopItems.get(position));
                    viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                            if (isChecked) {
                                shopItem.setDone(true);
                                viewHolder.textView.setTextColor(mainContex.getResources()
                                        .getColor(R.color.done_text_color));
                            } else {
                                shopItem.setDone(false);
                                viewHolder.textView.setTextColor(mainContex.getResources()
                                        .getColor(R.color.secondary_text));
                            }
                        }
                    });




                viewHolder.textView.setText(shopItem.getDescription());
               viewHolder.checkBox.setChecked(shopItem.isDone());
                   return convertView;
            }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何保存复选框的值和状态

来自分类Dev

带有复选框和状态插件的jsTree忘记选中的复选框

来自分类Dev

在Listview中失去复选框的状态

来自分类Dev

保存动态创建复选框的状态

来自分类Dev

复选框状态没有改变

来自分类Dev

绑定到Listview和复选框

来自分类Dev

为什么将具有不确定状态的复选框更改为未选中状态?

来自分类Dev

android,带有复选框的listview

来自分类Dev

Laravel复选框保存和更新

来自分类Dev

Listview +复选框

来自分类Dev

具有iTextsharp的PDF复选框

来自分类Dev

获取具有选中和未选中状态的所有复选框的列表

来自分类Dev

具有不确定状态的问号的三态复选框插件

来自分类Dev

滚动视图时,Android ListView失去复选框状态

来自分类Dev

使用CursorAdapter在ListView中维护复选框状态

来自分类Dev

复选框在ListView滚动时失去状态

来自分类Dev

滚动视图时,Android ListView失去复选框状态

来自分类Dev

ListView问题中具有最后位置的复选框会自动选中

来自分类Dev

具有CheckBox的ListView,“全部选中”复选框的功能与此相反

来自分类Dev

ListView问题中具有最后位置的复选框会自动选中

来自分类常见问题

在Android Studio中保存复选框状态(记住我)

来自分类Dev

触发更新面板时未保存复选框状态

来自分类Dev

保存复选框的状态,然后加载它

来自分类Dev

如何保存动态创建复选框的更改状态

来自分类Dev

如何保存列表视图中复选框的状态?

来自分类Dev

PHP / WP刷新后如何保存复选框状态?

来自分类Dev

如何在sqlite中保存android复选框状态?

来自分类Dev

从ArrayList中的列表视图保存复选框状态

来自分类Dev

使用JS使用phonegap保存复选框状态onclick

Related 相关文章

热门标签

归档