У меня есть ListView , который находится в режиме singleChoice . Все, что я хочу, это отобразить кнопку RadioButton в сторону, чтобы при нажатии была выделена подсветка, чтобы сказать, что она выбрана, а когда нажата другая кнопка, она возвращается к невыбранной, а новая становится выбранной. Почему это так сложно? Это не должно быть так сложно. Я потратил ДНЕЙ в поисках подходящего ответа на этот вопрос, и я ничего не нашел, поэтому я прошу, надеюсь, в ясной и сжатой форме.
Мой макет для просмотра списка (R.layout.view_orders) :
<?xml version="1.0" encoding="utf-8"?>
<ListView
android:choiceMode="singleChoice"
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@drawable/list_divider"
android:dividerHeight="1px"
android:focusable="false"
android:focusableInTouchMode="false"
android:cacheColorHint="#00000000">
</ListView>
Моя пользовательская строка (R.layout.orders_row) :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res/com.xxx.xxxxxx"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="6dip">
<com.xxx.xxxxxx.VerticalLabelView
app:text="SHORT"
app:textColor="#666"
app:textSize="14sp"
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/state"
android:layout_centerVertical="true"
android:gravity="center"
android:textSize="40sp"
android:layout_margin="2dip"
android:minWidth="30dip"
android:textColor="#555" />
<RelativeLayout
android:layout_toRightOf="@id/quantity"
android:layout_centerVertical="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#333"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
/>
<TextView
android:id="@+id/deets"
android:layout_below="@id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#888"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
/>
</RelativeLayout>
<RadioButton
android:id="@+id/selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
Мой onCreate () Метод:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_orders);
client = new Client(handler);
ola = new OrdersAdapter(this, R.layout.orders_row, Orders);
setListAdapter(ola);
final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
panel = (PositionsPanel) findViewById(R.id.panel);
Utility.showProgressBar(loading);
client.Connect("orders");
}
Теперь все, что лежит в основе, работает как положено, вы нажимаете на кнопку радио, и через ее тег я могу соответствующим образом выбрать этот элемент из списка и манипулировать им так, как я хочу. Однако при нажатии первой кнопки-переключателя будет выбрана последняя. Нажмите эту же кнопку еще раз, и теперь она также выбрана. Нажмите на нее еще раз, и ничего не происходит, будут выбраны как последний, так и первый. Теперь я нажимаю любой другой в списке, он выбирается, как ожидалось. Нажмите любую из выбранных радиокнопок, и ничего не происходит, радиокнопка остается выбранной.
Я попытался использовать следующее в onCreate () :
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_orders);
client = new Client(handler);
ola = new OrdersAdapter(this, android.R.layout.simple_list_item_single_choice, Orders);
setListAdapter(ola);
final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
panel = (PositionsPanel) findViewById(R.id.panel);
Utility.showProgressBar(loading);
client.Connect("orders");
}
и это просто показывает отсутствие переключателей вообще. УДИВИТЕЛЬНЫЙ .
Теперь, может быть (читай: скорее всего), я просто дремучий и не могу понять это, но я видел, что этот вопрос часто задавали без реального ответа. Много ссылок на другие учебники или на книгу парня из Commonsware. Тем не менее, комментарии уже устарели, и его хранилище изменилось настолько, что это уже не правильные ответы.
Итак, у кого-нибудь есть идеи, как извлечь из этого ожидаемую функциональность? Или, если это не удалось, просто передайте мне исходный код приложения GMail. :)