Android CheckedTextView - Изменение проверенного состояния на клик
-
30-09-2019 - |
Вопрос
У меня есть список, который должен быть нескольким выбором (т.е. элемент каждого списка имеет флажок, который можно проверить / не проверять). Просмотр списка находится в Tabhost, а содержимое для первой вкладки TEH.
Моя настройка похожа на так:
Моя вкладка настроена с:
TabSpec tab = tabHost.newTabSpec("Services");
tabHost.addTab(tabHost.newTabSpec("tab_test1").setIndicator("Services").setContent(new Intent(this, ServiceList.class)));
Когда вкладка нажата новая активность ServiceList запускается
Сервисист определяется как таковой:
public class ServiceList extends ListActivity{
private EscarApplication application;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.service_list);
ServiceList.this.application = (EscarApplication) this.getApplication();
final ListView listView = getListView();
}
protected void onListItemClick(ListView l, View v, int position, long id) {
String.valueOf(id);
Long.toString(id);
((CheckedTextView) v).setChecked(true);
super.onListItemClick(l, v, position, id);
}
@Override
public void onStart() {
super.onStart();
//Generate and display the List of visits for this day by calling the AsyncTask
GenerateServiceList services = new GenerateServiceList();
int id = ServiceList.this.application.getVisitId();
services.execute(id);
listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
//The AsyncTask to generate a list
private class GenerateServiceList extends AsyncTask<Integer, String, Cursor> {
// can use UI thread here
protected void onPreExecute() {
}
// automatically done on worker thread (separate from UI thread)
protected Cursor doInBackground(Integer...params) {
int client_id = params[0];
ServiceList.this.application.getServicesHelper().open();
Cursor cur = ServiceList.this.application.getServicesHelper().getPotentialVisitServices(client_id);
return cur;
}
// can use UI thread here
protected void onPostExecute(Cursor cur){
startManagingCursor(cur);
// the desired columns to be bound
String[] columns = new String[] {ServicesAdapter.KEY_SERVICE};
// the XML defined views which the data will be bound to
int[] to = new int[] {R.id.display_service};
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(ServiceList.this, R.layout.service_list_element, cur, columns, to);
// set this adapter as your ListActivity's adapter
ServiceList.this.setListAdapter(mAdapter);
ServiceList.this.application.getServicesHelper().close();
}
}
}
Итак, все работает нормально, пока не нажму на свой элемент списка, чтобы изменить состояние флажков.
Часть кода TEH набора для обработки событий щелчка вызывает мне проблемы:
protected void onListItemClick(ListView l, View v, int position, long id) {
String.valueOf(id);
Long.toString(id);
((CheckedTextView) v).setChecked(true);
super.onListItemClick(l, v, position, id);
}
Мое понимание состоит в том, что View V передан методу OnListiteMClick респондентов моего элемента списка, поэтому я пытаюсь отличить V в качестве CheckedTextView и установить TEH Creehent Value To True, однако это просто заставляет мое приложение для сбоя. Я здесь не хватает что-то простое, или есть ли более простой способ сделать это?
Спасибо
Кевин
Решение
Вы отладили его, чтобы проверить, является ли «V» NULL? Если это так, вам нужно использовать макет для извлечения вида.
if(v == null)
{
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.service_list, null);
}