我需要一些帮助,我不知道如何解决这个问题。
当我设置适配器时,我需要默认选择几个复选框,但我不能这样做。为什么?我认为问题是CheckableRelativeLayout。我使用RelativeLayout的这个变体,因为我需要单击行并选择复选框。
当我使用RelativeLayout的这个变体时,列表中的所有复选框都未选中。如果您在最后看到我的日志,当选中复选框时会触发事件“onCheckedChanged”,我不知道为什么。
请帮我一下,谢谢。
这是我的活动代码:
@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);
}
这是我的商品代码:
public class Item {
private String title;
private Boolean checked;
public Item(String title, Boolean checked) {
this.title = title;
this.checked = checked;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Boolean getChecked() {
return checked;
}
public void setChecked(Boolean checked) {
this.checked = checked;
}
}
我的CheckableRelativeLayout
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));
}
}
}
}
最后是我的适配器代码:
public class Adapter extends BaseAdapter {
public static String TAG = "Adapter";
private Context context;
private List<Item> items;
private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
public Adapter(Context context, List<Item> items) {
this.context = context;
this.items = items;
Log.d(TAG, "Constructor");
// Initizalice the states.
for (int i = 0; i < this.getCount(); i++) {
Log.d(TAG, "ItemChecked ==> " + items.get(i).getChecked());
itemChecked.add(i, items.get(i).getChecked());
}
}
@Override
public int getCount() {
return this.items.size();
}
@Override
public Object getItem(int position) {
return this.items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
// View Holder
static class ViewHolder {
TextView title;
CheckBox checkbox;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Log.d(TAG, "getView -------------------- position ==> " + position);
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) convertView.findViewById(R.id.listView_text);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.myCheckBox);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Item item = items.get(position);
Log.d(TAG, "isChecked ------------------- ==> " + itemChecked.get(position));
viewHolder.title.setText(item.getTitle());
viewHolder.checkbox.setChecked(itemChecked.get(position));
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
itemChecked.set(position, isChecked);
Log.d(TAG, "onCheckedChanged: isChecked ------------------- ==> " + isChecked);
Log.d(TAG, "onCheckedChanged: Position ------------------- ==> " + position);
}
});
return convertView;
}
}
输出日志为:
Constructor
ItemChecked ==> false
ItemChecked ==> true
getView -------------------- position ==> 0
isChecked ------------------- ==> false
getView -------------------- position ==> 1
isChecked ------------------- ==> true
onCheckedChanged: isChecked ------------------- ==> false (Why ??)
onCheckedChanged: Position ------------------- ==> 1
终于找到答案了…从这里复制:选中-多选-列表视图
它的工作原理。我有一个列表视图,默认情况下激活了几个复选框,当我向下滚动/向上滚动时,状态不会丢失。
我的活动代码:
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
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activity_async_select_item, parent, false);
}
CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.checkedTextView1);
final Item item = items.get(position);
checkedTextView.setText(item.getTitle());
return convertView;
}
问题内容: 堆栈上的菜鸟在这里溢出。我正在处理具有传输作业功能的网页。这使用户可以选中复选框以将作业发送回办公室,或者从所有可用列表中选择技术人员。我的问题是如何设置复选框,以便在页面加载时默认选中该复选框,并相应地禁用选择列表。这是我目前拥有的代码: 这是一个jsfiddle:http : //jsfiddle.net/hugmungus/LvHJw/5/ 当前,页面加载时已选中复选框,但该列表
问题内容: 在React中为复选框状态分配默认值后,我无法更新复选框状态。 分配后,我无法通过单击取消选中/选中来交互复选框状态。 问题答案: 如果仅使用创建复选框,则使用该属性 。 归功于@nash_ag
问题内容: 我有一个很奇怪的要求,其中要求我默认在HTML的下拉菜单中没有选择任何选项。然而, 我不能用这个 因为,为此,我将必须进行验证以处理第一个选项。有人可以在没有将第一个选项作为select标签的一部分的情况下帮助我实现此目标吗? 问题答案: 也许这会有所帮助 将默认显示。但是,如果您选择一个选项,则将无法再次选择它。 您也可以通过添加一个空白来隐藏它 因此它将不再显示在列表中。 选项2
如何设置ng选项的默认值。。。 以下是我的ng选项指令:
我正在尝试一个Woocommerce票证插件。默认情况下,该插件会显示一个表,其中包含多个票证变体作为产品,并在下面显示一个文本字段作为其数量和一个提交按钮,以将产品添加到购物车中。 我想用单选按钮或复选框替换这个文本字段,这样用户就可以选择一种类型的票证,然后点击提交按钮将其中的一部分添加到购物车中。 我的想法是在foreach循环中创建一个复选框或单选按钮,该复选框或单选按钮的值为quanti
问题内容: 我正在研究适用于Python的matplotlib库。我开始理解它的一些基本复杂性,因为pylab和pyplot之间的区别,并且我正在尝试复制和修改图库中的一些示例。 我仍然不清楚的一件事是配置文件matplotlibrc的实际作用。 目前,我使用Windows 7下的WinPython 3.3.5.0 64位分发版。.matplotlibrc文件位于WinPython-64bit-3