2011-11-14 10 views
6

Ho un semplice ArrayAdapter. Voglio impostare un listener per ogni riga del mio elenco in modo tale che si apra una nuova attività. Come potrei farlo? Il mio codice ArrayAdapter -Android - come aggiungere un metodo di selezione di elementi a un ArrayAdapter

public class CountryListAdapter extends ArrayAdapter<String> { 
private final Activity context; 
private final ArrayList<String> names; 

public CountryListAdapter(Activity context, ArrayList<String> names) { 
    super(context, R.layout.rowlayout, names); 
    this.context = context; 
    this.names = names; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.rowlayout, null, true); 
    TextView textView = (TextView) rowView.findViewById(R.id.label); 
    textView.setText(names.get(position)); 
    return rowView; 
} 

risposta

8

Supponendo che si sta utilizzando un ListActivity implementando OnItemClickListener è possibile utilizzare questo codice:

ArrayAdapter<Object> ad = new ArrayAdapter<Object>(this, 
       android.R.layout.simple_list_item_checked, items); 
     setListAdapter(ad); 
     ListView list = getListView(); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     //list.setItemChecked(0, true); 
     list.setOnItemClickListener(this); 

EDIT: In caso contrario, se non si estende ListActivity, avere un controllo ListView nel layout e sostituirlo con qualcosa di simile ListView list = getListView()ListView list = findViewById(R.id.listView). Sostituire list.setOnItemClickListener(this) con

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      } 
     }); 
+0

C'è un modo per associare la logica onClick all'ArrayAdapter (o qualsiasi altro adattatore)? Ho un adattatore, ma molte ListViews, che sono riempite con esso, e sarebbe meglio legarlo all'adattatore stesso? –

-2

Dopo aver impostato la scheda utilizzando:

mListView.setAdapter(myCountryListAdapter); 

Poi è possibile impostare un clic listener per l'ListView:

mListView.setOnParentClickListener(new OnClickListener() {   
    public void onClick(View view,) { 
      ///do what you want the click to do 
    }  
    }); 
4

Semplicemente implementare AdapterView.OnItemClickListener.

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 
    Intent i = new Intent(this, ProductActivity.class); 
    i.putExtra("item_id", manager.getItemIdAtIndex(pos)); 
    startActivity(i); 
} 

Quindi basta impostare la classe con quel metodo come onItemClickListener nell'adattatore.

Problemi correlati