Я использую listView, который входит в LinearLayout. Этот просмотр списка использует ArrayAdapter из simple_list_item_single_choice с добавленным RadioButton. Это 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);
}
}
}
Когда я щелкаю элемент из списка, я получаю правильный вывод log.d, правильная позиция, которую я щелкнул в списке. Итак, я нажимаю на элемент в списке, но кнопка RadioButton (например, android: checkMark = "? Android: attr / listChoiceIndicatorSingle") не помечена.
Нужно ли мне устанавливать android: checked = "true" в моем обычном simple_list_choice_custom.xml при нажатии на элемент в списке?