使用listview中的标记定位特定复选框

时间:2011-05-27 06:45:16

标签: android listview checkbox tags

在我的应用程序中,我有一个包含行,每个行包含图像,文本和复选框的列表。我覆盖了simpleadapter的getView方法,根据它在行中的位置为每个复选框包含一个标记(代码在这里http://www.heypasteit.com/clip/YME ... bs和bs1是布尔值)。这样我可以告诉调用onCheckedChanged时哪个复选框被更改了。但是,我需要手动设置各个复选框的状态。例如,将复选框的状态设置为标记“3”(第3行的复选框)为“true”。

对此有任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以使用一系列布尔值替换您的方法。例如,如果数组中有15个元素,则可以创建布尔值[15],并在用户单击复选框时更改不同位置的状态,并在开头设置初始状态。

不是一个完美的例子,但我希望你能得到这个想法:

public class YourActivity extends Activity {

protected boolean[] checkStates;

protected void onCreate(android.os.Bundle savedInstanceState) {
    //... Some of your code where you get a list of you objects
    checkStates = new boolean[list.size()];
    // As an example, let's check some of them:
    checkStates[3] = true;
    checkStates[7] = true;
    //.. Something more
};

SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.rowsecond, new String[] {"icon", "name"}, new int[] {R.id.image1, R.id.text1}) {
    public View getView(int position, View convertView, ViewGroup parent) {
        final View v = super.getView(position, convertView, parent);
        boxer = (CheckBox)v.findViewById(R.id.checkbox);
        boxer.setTag(position);
        boxer.setOnCheckedChangeListener(checkedChangeListener);
        boxer.setChecked(checkStates[position]);
        return v;
    }

    private final OnCheckedChangeListener checkedChangeListener = new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
            final Integer position = (Integer) buttonView.getTag();
            checkStates[position] = isChecked;
        }
    };
};

}

如果您尝试更新checkedChangeListener外部和初始onCreate()方法之后的复选框状态,请不要忘记调用yourAdapterInstance.notifyDataSetChanged();