我使用一个位于LinearLayout中的listView。此列表视图使用simple_list_item_single_choice的ArrayAdapter,并添加了RadioButton。这个单选按钮进入listView,我想标记一下何时单击listView中的元素。但是,如果我单击listView中的元素,则不会发生任何事情。该XML与我的活动有关:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="500dp"
android:layout_height="400dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:orientation="vertical">
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
对于listView中的项目,我采用“ simple_list_item_single_choice”并对其进行自定义,图像,短文本和单选按钮,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
android:drawablePadding="10dp"
android:drawableStart="@drawable/own_icon"
android:gravity="center_vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="@color/colorBlack">
这是我的片段:
public class Example extends Fragment {
ListView listView1;
ArrayAdapter<String> detecAdapter;
ListItemClicked listItemClicked;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = inflater.inflate(R.layout.fragment1, container, false);
listView1 = (ListView) view.findViewById(R.id.listView1);
detecAdapter = new ArrayAdapter<String>(getContext(), R.layout.simple_list_choice_custom);
listView1.setAdapter(detecAdapter);
listItemClicked = new ListItemClicked();
return view;
}
@Override
public void onStart() {
listView1.setOnItemClickListener(listItemClicked);
}
class ListItemClicked implements AdapterView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position) {
listView1.setItemChecked(position,true);
Log.d(TAG, "ListElementClicked: "+position);
}
}
}
当我单击listView中的项目时,我得到了正确的log.d输出,因此在列表中单击的位置是正确的。因此,我单击了列表中的一个项目,但是未标记radioButton(例如android:checkMark =“?android:attr / listChoiceIndicatorSingle”)。
当我单击列表中的项目时,是否需要在自定义的simple_list_choice_custom.xml中设置android:checked =“ true”?