在Android中访问ListView CheckBox [英] Accessing ListView CheckBox in Android

查看:104
本文介绍了在Android中访问ListView CheckBox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在android中创建了一个待办事项列表应用程序。一切都运行得很好,除了我在ListView中有复选框,我无法以编程方式设置。我正在使用一个SQLite数据库来存储我的任务以及它们是否已标记为完成。当我选中一个复选框时,它会在我的数据库中成功保存1。我有一个updateUI方法,从我的数据库中读取我的任务文本并显示它。我已经创建了一个新的updateUICheckBox方法来处理更新复选框的UI。现在我只是试图将所有复选框设置为选中,但是当我调用setChecked(true)时,我得到一个nullpointerexception。

I'm making a to-do list app in android. Everything is working well enough except I have checkboxes in a ListView that I cannot set programmatically. I'm using a SQLite database that stores my tasks and whether or not they have been marked as complete. When I check a checkbox, it successfully saves a "1" in my database. I have an updateUI method that reads the text of my tasks from my database and displays it. I have made a new "updateUICheckBox" method to handle updating the UI for the checkboxes. Right now I'm just trying to set all my checkboxes as checked, but I'm getting a nullpointerexception when I call setChecked(true).

// not working
private void updateUICheckBox() {
    CheckBox c = (CheckBox) findViewById(R.id.list_complete_check_box);
    c.setChecked(true); // null pointer exception
}


推荐答案

尝试在列表中添加一个标志

Try add a flag in your list

public class Country {
    public String name;
    public String code;
    public String abbreviation;
    public boolean selected = false;   //--> example this flag
    public int image;
}

适配器

public class CountryCodeAdapter extends BaseAdapter {
    private Context context;
    private List<Country> countryList;


    public CountryCodeAdapter(Context context, List<Country> countryList) {
        this.context = context;
        this.countryList = countryList;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.adapter_country_code, parent, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        Country country = countryList.get(position);
        viewHolder.tv_item_country_name.setText(country.getName());

        String plus = context.getResources().getString(R.string.plus);
        viewHolder.tv_item_country_code.setText(plus.concat(country.getCode()));
        int image = country.getImage();
        if (image != -1) {
            viewHolder.iv_item_country.setImageResource(image);
        }

        return convertView;
    }

    public void updateList(List<Country> countryList) {
        this.countryList = countryList;
        notifyDataSetChanged();
    }

    static class ViewHolder {
        @Bind(R.id.iv_item_country)
        ImageView iv_item_country;
        @Bind(R.id.tv_item_country_name)
        TextView tv_item_country_name;
        @Bind(R.id.tv_item_country_code)
        TextView tv_item_country_code;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}

当你想要修改标志,在适配器外执行此操作

When you want to modify the flag, do this outside the adapter

CountryCodeAdapter adapter = new CountryCodeAdapter(activity, countryList);
//eg. you may change the 1st element in countryList selected flag into true and //call updateList 
        if (adapter != null) {
            adapter.updateList(countryList);
        }

使用此标志设置适配器内的复选框。

Use this flag to set your checkbox inside the adapter.

这篇关于在Android中访问ListView CheckBox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆