Android CheckableRelativeLayout上的默认选中复选框
我需要一些帮助,我不知道如何解决这个问题 当我设置适配器时,我需要在默认情况下选中一些复选框,但我不能这样做。为什么?我认为问题在于可检查的相对性。我使用RelativeLayout的这个变体,因为我需要单击行并选中复选框 当我使用RelativeLayout的这个变体时,列表中的所有复选框都被取消选中。如果最后看到我的日志,选中复选框时会触发onCheckedChanged事件,我不知道为什么 请帮我一点忙,谢谢 这是我的活动代码:Android CheckableRelativeLayout上的默认选中复选框,android,Android,我需要一些帮助,我不知道如何解决这个问题 当我设置适配器时,我需要在默认情况下选中一些复选框,但我不能这样做。为什么?我认为问题在于可检查的相对性。我使用RelativeLayout的这个变体,因为我需要单击行并选中复选框 当我使用RelativeLayout的这个变体时,列表中的所有复选框都被取消选中。如果最后看到我的日志,选中复选框时会触发onCheckedChanged事件,我不知道为什么 请帮我一点忙,谢谢 这是我的活动代码: @Override protected vo
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = new ArrayList<Item>();
items.add(new Item("A1", false));
items.add(new Item("A2", true));
listView = (ListView) findViewById(R.id.listView);
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
}
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
// !! After set the adapter i check the default checkbox.
for (int i = 0; i < items.size(); i++) {
listView.setItemChecked(i, items.get(i).getChecked());
}
我的支票亲戚
public class CheckableRelativeLayout extends RelativeLayout implements Checkable {
private boolean isChecked;
private List<Checkable> checkableViews;
public CheckableRelativeLayout(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
initialise(attrs);
}
public CheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initialise(attrs);
}
public CheckableRelativeLayout(Context context, int checkableId) {
super(context);
initialise(null);
}
/*
* @see android.widget.Checkable#isChecked()
*/
public boolean isChecked() {
return isChecked;
}
/*
* @see android.widget.Checkable#setChecked(boolean)
*/
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
for (Checkable c : checkableViews) {
c.setChecked(isChecked);
}
}
/*
* @see android.widget.Checkable#toggle()
*/
public void toggle() {
this.isChecked = !this.isChecked;
for (Checkable c : checkableViews) {
c.toggle();
}
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
final int childCount = this.getChildCount();
for (int i = 0; i < childCount; ++i) {
findCheckableChildren(this.getChildAt(i));
}
}
/**
* Read the custom XML attributes
*/
private void initialise(AttributeSet attrs) {
this.isChecked = false;
this.checkableViews = new ArrayList<Checkable>(5);
}
/**
* Add to our checkable list all the children of the view that implement the
* interface Checkable
*/
private void findCheckableChildren(View v) {
if (v instanceof Checkable) {
this.checkableViews.add((Checkable) v);
}
if (v instanceof ViewGroup) {
final ViewGroup vg = (ViewGroup) v;
final int childCount = vg.getChildCount();
for (int i = 0; i < childCount; ++i) {
findCheckableChildren(vg.getChildAt(i));
}
}
}
最后我找到了答案。。。从这里复制: 它起作用了。我有一个列表视图,默认情况下很少激活复选框,当我向下/向上滚动时,状态不会丢失 我的活动代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = new ArrayList<Item>();
items.add(new Item("A1", false));
items.add(new Item("A2", true));
listView = (ListView) findViewById(R.id.listView);
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
}
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
// !! After set the adapter i check the default checkbox.
for (int i = 0; i < items.size(); i++) {
listView.setItemChecked(i, items.get(i).getChecked());
}
最后我找到了答案。。。从这里复制: 它起作用了。我有一个列表视图,默认情况下很少激活复选框,当我向下/向上滚动时,状态不会丢失 我的活动代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = new ArrayList<Item>();
items.add(new Item("A1", false));
items.add(new Item("A2", true));
listView = (ListView) findViewById(R.id.listView);
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
}
adapter = new Adapter(this, items);
listView.setAdapter(adapter);
// !! After set the adapter i check the default checkbox.
for (int i = 0; i < items.size(); i++) {
listView.setItemChecked(i, items.get(i).getChecked());
}
您是否尝试过以下操作:?不工作:,我在复选框之前更改了侦听器setOnCheckedChangeListener。setChecked,clean,rebuild和run是相同的。您是否尝试过以下操作:?不工作:,我在复选框之前更改了侦听器setOnCheckedChangeListener。setChecked,clean,rebuild和run是相同的。