带有复选框和所有可点击的Android ListView [重复]
Posted
技术标签:
【中文标题】带有复选框和所有可点击的Android ListView [重复]【英文标题】:Android ListView with Checkbox and all clickable [duplicate] 【发布时间】:2011-07-22 00:00:37 【问题描述】:可能重复:android: Binding data from a database to a CheckBox in a ListView?
我想将 ListView 与具有以下布局的项目一起使用
-------------------------
[CB] TV TV
-------------------------
CB 是一个复选框,TV 是一个 Textview。
现在我在某处读到,ListView 中不能有可点击的项目。如果您有一些,那么您将无法单击 ListItems。 但如果我查看 GoogleMail 应用程序,这是可能的。我可以用复选框标记多条消息(然后为它们选择一个操作),或者我可以单击 ListItem(或使用 dpad 滚动)以进入另一个屏幕。 有人有代码/示例这是怎么可能的?
【问题讨论】:
我没有代码 atm 但有可能,因为移动、拖动、单击和 longClick 不是同一个事件。并且复选框的命中框也在列表视图的顶部。 看代码here可以在listview中选择多个项目。检查here 带有文本和图像示例:here 这个问题不是重复的。另一个问题是关于如何使 CursorAdapter 将正确的 db 列绑定到特定视图。这个问题根本不是关于绑定数据,而是关于如何在 ListView 中使复选框可点击。 这不是重复的...这是关于 ListView + CheckBox,.. 而不是数据绑定!愚蠢的版主...!!!! 【参考方案1】:下面的代码会帮助你:
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;
希望这会有所帮助。
【讨论】:
【参考方案2】:在您的 XML 布局中将 CheckBox
设置为 focusable="false"
。否则它将从列表视图中窃取点击事件。
当然,如果您这样做,您需要手动处理将 CheckBox
标记为选中/未选中(如果单击列表项而不是 CheckBox
),但无论如何您可能都希望这样做。
【讨论】:
谢谢,这对我有用;) 为复选框设置 focusable="false" 允许我单击列表视图项目,但这并不能阻止我单击复选框本身。为此,我还需要为复选框设置 clickable="false"。 如何允许在列表视图android的项目点击上窃取点击复选框? 我尝试设置 recyclerview 的 focausable = "false" 复选框。它工作正常,我可以单击列表项。但是当我尝试在复选框上添加 checkedChangeLsener 时,它阻止了列表项。现在无法单击列表项。 @太平洋天空【参考方案3】:此代码适用于我的项目,我可以选择列表视图项和复选框
<?xml version="1.0" encoding="utf-8"?>
<!-- Single List Item Design -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:clickable="true" >
<TextView
android:id="@+id/label"
android:layout_
android:layout_
android:layout_weight="4" />
<CheckBox
android:id="@+id/check"
android:layout_
android:layout_
android:layout_weight="1"
android:focusable="false"
android:text="" >
</CheckBox>
</LinearLayout>
【讨论】:
【参考方案4】: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());
);
【讨论】:
【参考方案5】:将列表视图适配器设置为“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 个文本视图的复选框。以上是关于带有复选框和所有可点击的Android ListView [重复]的主要内容,如果未能解决你的问题,请参考以下文章
带有提示和图像的 Android 可点击 TextView 以启动搜索对话框并显示所选结果