Пользовательский одиночный выбор ListView

Я хочу создать пользовательский вид списка с двумя текстовыми элементами и радиокнопкой в ​​одной строке. И в списке выберите состояние переключателя, чтобы переключиться. Я не могу использовать Simple Adapter здесь.

Я уже задал этот вопрос в одиночном выборе ListView Custom Row Layout, но не нашел удовлетворительного решения.

В настоящее время я использую simple_list_item_single_choice и помещаю данные обоих TextViews в одну, разделенную некоторыми пробелами. Но здесь это ухудшается (показано на рисунке ниже).

http://db.tt/ulP6pn7V

Я хочу установить местоположение размера и цены и сделать просмотр списка одним из вариантов.

XML-макет для списка может выглядеть примерно так:

**     ** 

Как сделать для этого пользовательский адаптер?

Я все время искал ответ на эту проблему, и самая полезная вещь, которую я нашел до сих пор, – это статья .

Хотя я еще не реализовал решение, которое он предлагает, похоже, что это на правильном пути.

В принципе, ListView с одним выбором ожидает, что виджеты вы предоставите ему для реализации интерфейса Checkable . LinearLayout и др. Нет. Поэтому вам нужно создать собственный макет, который наследует LinearLayout (или любой другой макет, который вы хотите использовать для своих элементов) и реализует необходимый интерфейс.

У меня была подобная ситуация, но я легко ее исправил. Попробуй это:

  1. Расширьте ListActivity и настройте свой собственный адаптер списка.

     public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //if you need title to be hidden setContentView(R.layout.activity_add_to_cart_select_service_plan); setListAdapter(adapter); } 
  2. Создайте поле для хранения выбранной позиции индекса в адаптере

     int selectedIndex = -1; 
  3. Обеспечьте интерфейс для него

     public void setSelectedIndex(int index){ selectedIndex = index; } 
  4. Установите проверяемое состояние в true или false на основе выбранного индекса внутри getView ()

     @Override public View getView(int position, View convertView, ViewGroup parent) { RadioButton rbSelect = (RadioButton) convertView .findViewById(R.id.radio1); if(selectedIndex == position){ rbSelect.setChecked(true); } else{ rbSelect.setChecked(false); } } 
  5. Установите переключатель переключателя и щелчок, привязанный к «false»,

       
  6. Установите listview descendantFocusability, связанный с ‘beforeDescendants’

      
  7. Переопределить onListItemClick

     @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); adapter.setSelectedIndex(position); adapter.notifyDataSetChanged(); } 

Вот и все …

Обработал подобную проблему с помощью Hack (Не идеальное решение, но все же работает ..)

  listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { for (int i = 0; i < parent.getCount() ; i ++) { View v = parent.getChildAt(i); RadioButton radio = (RadioButton) v.findViewById(R.id.radio); radio.setChecked(false); } RadioButton radio = (RadioButton) view.findViewById(R.id.radio); radio.setChecked(true); } }); 

**

    

**

  • Пересечение и объединение ArrayLists в Java
  • Использование связанных данных, хранящихся в двумерном массиве
  • Как реализовать держатель вида?
  • Заменить значения в списке с помощью Python
  • Найдите пересечение двух вложенных списков?
  • Копирование вложенных списков в Python
  • Как настроить переключатель предпочтений списка
  • Лучший способ сделать сортировку WPF ListView / GridView при нажатии на заголовок столбца?
  • записать список объектов в файл
  • Как я могу использовать автоматическую прокрутку ListBox при добавлении нового элемента?
  • WPF ListView Неактивный цвет выделения
  • Давайте будем гением компьютера.