带有ListView的Android Checkbox

时间:2015-01-02 00:18:21

标签: android checkbox

这是一个难以解释的情况。我有一个主要活动,其中包含操作栏选项卡以循环遍历不同的片段。加载的第一个选项卡式片段具有可以使用复选框滚动的列表视图。当你第一次运行应用程序时会发生什么,如果你点击一个复选框,它就不会检查。但是,如果您单击另一个选项卡,然后单击后退一切正常。

我已经看过许多其他情况,人们没有复选框使用滚动视图,我已经实施了他们的解决方案,所以我会认为我的情况也是固定的,因为它适用于你的工作标签结束后。

有关为什么第一次加载视图时它会工作的任何想法?我知道这是一个难以回答的问题,我不认为发布代码真的会有所帮助。谢谢你们。

编辑:

这是onCheckedChangedListener

public OnCheckedChangeListener checkboxContactsCallback = new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked) {
            System.out.println("Checkbox checked");
            objects.getContactList().getContactList().get((Integer)buttonView.getTag(R.string.position)).setCheckbox(true);
            if(keyStoreContacts.getPublicKeyStore().size() == 0) {
                LinearLayout layout = (LinearLayout) rootView.findViewById(R.id.contactsWrapperLayout);
                layout.addView(helpers.getInterfaceHelper().createDynamicButton("Delete Contact", checkboxButtonListener));
            }
            keyStoreContacts.addPublicKey((String)buttonView.getTag(R.string.publickey));
        }
        else if(!isChecked) {
            System.out.println("Checkbox unchecked");
            objects.getContactList().getContactList().get((Integer)buttonView.getTag(R.string.position)).setCheckbox(false);
            if(keyStoreContacts.getPublicKeyStore().size() <= 1) {
                LinearLayout layout = (LinearLayout) rootView.findViewById(R.id.contactsWrapperLayout);
                LinearLayout layout2 = (LinearLayout)layout.findViewById(1);
                layout.removeView(layout2);
            }
            keyStoreContacts.removePublicKey((String)buttonView.getTag(R.string.publickey));
        }
    }
};

这是我的数组适配器中的getView方法

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) act.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.inflatable_contact_view, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.inflate_textview);
    CheckBox checkbox = (CheckBox)rowView.findViewById(R.id.checkbox);
    System.out.println("Setting the checkbox " + objects.getContactList().getContactList().get(position).getIsChecked());
    checkbox.setChecked(objects.getContactList().getContactList().get(position).getIsChecked());
    checkbox.setOnCheckedChangeListener(callback.getCheckboxListener());
    checkbox.setTag(R.string.publickey, objects.getContactList().getContactList().get(position).getPublicKey());
    checkbox.setTag(R.string.position, position);
    textView.setText(objects.getContactList().getContactList().get(position).getDisplayName());
    PublicKeyStore keyStore = new PublicKeyStore();
    keyStore.addPublicKey(objects.getContactList().getContactList().get(position).getPublicKey());
    contact.setTag(keyStore);
    return rowView;
}

1 个答案:

答案 0 :(得分:0)

只需将OnCheckedChangeListener替换为View.OnClickListener就可以看起来像这样

            checkBox.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                    Checkable checkable = (Checkable) v;
                    if (checkable.isChecked()) {
                    } else {
                    }
                }
            });