2

我希望我RelativeLayout表明它已被检查。为此,我认为自定义RelativeLayout将是最简单的,它将实现checkable. 因此,当我单击一个项目时,这将被调用并修改我的布局。我认为最简单的方法是将其突出显示setBackgroundColor为全息选择的蓝色。

首先,上面有什么问题吗?(也就是说,这听起来是个好主意吗?)

其次,它的工作原理是检查一个项目,如果我调用isChecked它,它会返回正确的答案。但是,它不会更新 RelativeLayout 以指示它已被选中。我认为我的代码有问题。

public class CustomRL extends RelativeLayout implements Checkable {

private boolean isChecked;
List<RelativeLayout> rl = new ArrayList<RelativeLayout>();
Context context;

public CustomRL(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
}

@Override
public boolean isChecked() {
    return isChecked;
}

@Override
public void setChecked(boolean isChecked) {
    this.isChecked = isChecked;
    for (RelativeLayout r : rl)
        r.setBackgroundColor(isChecked ? Color.parseColor("#33b5e5")
                : 0x00000000);
}

@Override
public void toggle() {
    this.isChecked = !this.isChecked;
    for (RelativeLayout r : rl)
        r.setBackgroundColor(this.isChecked ? Color.parseColor("#33b5e5")
                : 0x00000000);
}

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    final int childCount = this.getChildCount();
    for (int i = 0; i < childCount; ++i) {
        getRelativeLayout(this.getChildAt(i));
    }
}

private void getRelativeLayout(View v) {
    if (v instanceof RelativeLayout) {
        rl.add((RelativeLayout) v);
    }
}
}
4

1 回答 1

1

这对于正确使用此布局很重要。首先当你在 ListView 中使用它时,你应该设置

listView.setItemsCanFocus(false)

并将选择模式设置为

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)

或者

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)

于 2013-10-29T12:54:57.303 回答