У меня есть ListView, который находится в режиме singleChoice. Все, что я хочу, - отобразить RadioButton в стороне, что при щелчке по ключевым словам, чтобы сказать, что он выбран, и когда щелкнут другой, который возвращается к невыбранному, и новый выбирается. Почему это так сложно? Это не должно быть так сложно. Я потратил DAYS на поиск подходящего ответа на этот вопрос, и я ничего не нашел, поэтому я надеюсь, что мы будем ясно и лаконично.
Мой макет для списка (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");
}
и просто не отображается никаких переключателей. УДИВИТЕЛЬНЫЙ.
Теперь, может быть (прочитайте: скорее всего), я просто плотный и не могу понять это, но я видел, что этот вопрос задал много, не имея реального ответа. Много ссылок на другие уроки или на книгу коммонсонов. Тем не менее, комментарии уже устарели, и его репозиторий сильно изменился, и это уже не правильные ответы.
Итак, кто-нибудь знает, как получить ожидаемую функциональность из этого? Или, если это не так, просто передайте мне исходный код приложения GMail.:)