我正在为android开发一个小型应用程序。我将ListView与TextView和CheckBox一起使用
我已经可以处理CkeckBox勾号了。此外,我想让ListView的整行都可以点击,但我找不到任何方法来实现这一点。我已经尝试过让ListView可以点击:
android:clickable="true"
我还用ListView:的代码进行了尝试
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(null,"Clicked",Toast.LENGTH_LONG
}
});
这是我的ListView:代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="de.matthias.lolchampionowner.app.ChampionActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/championListView"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true" />
</RelativeLayout>
就像whatsapp做的那样。有了Android Studio,我可以发现这也是一个ListView,但代码太模糊了,无法从中获得任何东西。
这是一张图片:WhatsApp列表查看
我不知道如何实现它。我请求任何帮助。
以下是nKn:的答案
你必须重写getView方法。这是我的代码,我可以处理ListView和CheckBox的点击:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.row_name_check, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.textViewRow);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxRow);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
final ChampionActivity.EachRow row = this.getItem(position);
row.checked = ItemStorage.getChampSkinOwned(row.text);
holder.textView.setText(row.text);
holder.checkBox.setChecked(row.checked);
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(((CheckBox)v).isChecked()) {
ItemStorage.setChampSkinOwned(row.text, true);
} else {
ItemStorage.setChampSkinOwned(row.text, false);
}
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("onClick", row.text + " clicked");
//Toast.makeText(null,"Clicked",Toast.LENGTH_LONG);
}
});
return convertView;
}
我也遇到了同样的问题,我不得不更改它以获得所需的结果。在ListView(而不是列表项)的代码中,将其更改为
android:layout_width="match_parent"
希望这对你们也有用
最好的想法可能是扩展ArrayAdapter
并覆盖getView()
方法。该方法的第二个参数是View
(通常称为convertView
,但不一定),含糊地说,是一行的表示,因此每行都会调用该方法。只需在上面申报onClickListener()
即可。
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
...
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
...
}
});
...
}
将ListView layout_width更改为"fill_rent",如下所示
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
... />
仅使用
android:layout_width="match_parent"