可能重复:
Android: Binding data from a database to a CheckBox in a ListView?
我想将ListView与具有以下布局的项目一起使用
-------------------------
[CB] TV TV
-------------------------
CB是一个复选框,电视是Textview。
现在我读到了一个你无法在ListView中拥有可点击项目的地方。如果你有一些,那么你将无法点击ListItems。 但是,如果我查看GoogleMail应用,这是可能的。我可以使用复选框标记多个消息(然后为它们选择一个操作)或者我可以单击ListItem(或使用dpad滚动)以进入另一个屏幕。 有人有代码/示例如何可能吗?
答案 0 :(得分:101)
在XML布局中将CheckBox
设置为focusable="false"
。否则它将从列表视图中窃取点击事件。
当然,如果这样做,如果单击列表项而不是CheckBox
,则需要手动处理将CheckBox
标记为已选中/未选中,但您可能还是想要这样做。< / p>
答案 1 :(得分:19)
将listview适配器设置为“simple_list_item_multiple_choice”
ArrayAdapter<String> adapter;
List<String> values; // put values in this
//Put in listview
adapter = new ArrayAdapter<UserProfile>(
this,
android.R.layout.simple_list_item_multiple_choice,
values);
setListAdapter(adapter);
答案 2 :(得分:9)
holder.checkbox.setTag(row_id);
和
holder.checkbox.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox c = (CheckBox) v;
int row_id = (Integer) v.getTag();
checkboxes.put(row_id, c.isChecked());
}
});
答案 3 :(得分:7)
此代码适用于我的项目,我可以选择列表视图项和复选框
<?xml version="1.0" encoding="utf-8"?>
<!-- Single List Item Design -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
<CheckBox
android:id="@+id/check"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="false"
android:text="" >
</CheckBox>
</LinearLayout>
答案 4 :(得分:5)
以下代码可以帮助您:
public class DeckListAdapter extends BaseAdapter{
private LayoutInflater mInflater;
ArrayList<String> teams=new ArrayList<String>();
ArrayList<Integer> teamcolor=new ArrayList<Integer>();
public DeckListAdapter(Context context) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
teams.add("Upload");
teams.add("Download");
teams.add("Device Browser");
teams.add("FTP Browser");
teams.add("Options");
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
}
public int getCount() {
return teams.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.decklist, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow);
holder.text = (TextView) convertView.findViewById(R.id.textname);
.......here you can use holder.text.setonclicklistner(new View.onclick.
for each textview
System.out.println(holder.text.getText().toString());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(teams.get(position));
if(position<teamcolor.size())
holder.text.setBackgroundColor(teamcolor.get(position));
holder.icon.setImageResource(R.drawable.arraocha);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView text;
}
}
希望这有帮助。