Android CheckedTextView - Изменение проверенного состояния на клик

StackOverflow https://stackoverflow.com/questions/3548406

Вопрос

У меня есть список, который должен быть нескольким выбором (т.е. элемент каждого списка имеет флажок, который можно проверить / не проверять). Просмотр списка находится в 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top