Frage

ich eine Listenansicht haben, dass der Bedarf mehrere Wahl zu sein (das heißt jedes Listenelement hat eine Checkbox, die überprüft werden können / nicht markiert) Die Listenansicht ist in einem TabHost und ist der Inhalt für teh erstes Tab.

Meine Einrichtung ist wie folgt:

Meine Register eingerichtet ist, mit:

TabSpec tab = tabHost.newTabSpec("Services");

tabHost.addTab(tabHost.newTabSpec("tab_test1").setIndicator("Services").setContent(new Intent(this, ServiceList.class)));

Wenn die Registerkarte geklickt neue Aktivität Dienstliste gestartet

Dienstliste wird als solche definiert:

    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();       

              }
         }
    }

So funktioniert alles ok, bis ich auf meiner Liste Element klicken, um das Kontrollkästchen Zustand zu ändern.

Der Teil des teh Codeset zu handle Click-Ereignisse verursacht mir Probleme:

 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);
            }

Mein Verständnis ist, dass die Ansicht v auf die onListItemClick Methode übergab meine Liste Element reperesents, so dass ich auf Guss v als CheckedTextView und Satz versuchen Teh Wert auf true geprüft, aber dies bewirkt, dass nur meine Anwendung zum Absturz bringen. Bin ich hier fehlt etwas einfach, oder gibt es einen einfacheren Weg, dies zu tun?

Danke

Kevin

War es hilfreich?

Lösung

Haben Sie es auf Fehler zu überprüfen, ob ‚v‘ null ist? Wenn ja, müssen Sie eine layoutInflator verwenden, um die Ansicht zu erhalten.

if(v == null)
{
    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.service_list, null);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top