2011-12-23 10 views
32

Robię klasy jak poniżejJak ustawić opcję onClickListener na ArrayAdapter?

// All necessary imports are here 

public class More extends Activity { 

    String[] MoreItems = { "Transfers", "Budgets", "Branches", "Tools", "News", 
      "Customer Service", "Settings", "Help", "About" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.more_view); 

     ListView moreListView = (ListView) findViewById(R.id.moreListView); 
     MoreListAdapter listAdapter = new MoreListAdapter(); 
     moreListView.setAdapter(listAdapter); 

     // accountsTypeListView.setOnItemClickListener(listClickListner); 
    } 

    class MoreListAdapter extends ArrayAdapter<String> { 
     MoreListAdapter() { 
      super(More.this, R.layout.list_item, MoreItems); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View row; 

      if (convertView == null) { 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.list_item, parent, false); 
      } else { 
       row = convertView; 
      } 
      TextView tv = (TextView) row.findViewById(R.id.textItem); 

      tv.setText(getItem(position)); 

      return row; 
     } 
    } 
} 

będzie generować listy, chcę zadzwonić do odpowiednich działań na danym kliknięciem, tak jakby użytkownik kliknie Transferu następnie pokaże aktywność przenoszenia, Jak mogę zadzwonić onClickListener na tej liście i jak mogę rozpocząć działanie po kliknięciu.

+0

chcesz ustawić OnClickListener na każdej pozycji Twojej ListView lub TextView z każdy przedmiot lub co? – Houcine

+0

row.setOnClickListener (this); ..... startActivity (this, someIntent); – Blundell

Odpowiedz

39

można też zrobić tak ..

moreListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Log.d("############","Items " + MoreItems[arg2]); 
      } 

     }); 
+2

Umieść to bezpośrednio pod miejscem, gdzie ustawiłeś adapter na moreListView.setAdapter (listAdapter); – localhost

+0

Świetne .. :) działało naprawdę dobrze .. dziękuję .. – Lal

1

Twój "Więcej" klasa ma rozszerzenie ListActivity zamiast aktywności, to można zastąpić onListItemClick

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the arrya 
} 

Edit: Zapomniałem powiedzieć, w układzie Twój ListView ma się nazywać: android: id = "@ android: id/lista"

+0

i jak ustawić go na detektorze dla każdej pozycji? –

+0

Każdy przedmiot otrzyma kliknięcie. po prostu wiesz, który z nich używa pozycji klikniętego przedmiotu, np. Więcej pozycji [pozycja] – Johann

+0

i czy powinniśmy wdrożyć onclicklistner czy nie? –

45

Istnieją dwie możliwości, aby obsłużyć kliknij zdarzenie dla każdego rząd.

1) Jeśli klasa rozszerza numer ListActivity, można zastąpić następującą metodę.

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the array 
} 

2) Uchwyt kliknij wydarzenie rzędu w getView() metody

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - za uwzględnienie obu scenariuszy .. !! –

+0

Druga metoda zawiesza się po onclik na pozycji szukanego/odświeżanego widoku listy podczas wywoływania intencji wewnątrz metody onclick! jakieś rozwiązanie? problem pojawia się, gdy używamy własnego filtru wyszukiwania. –

+0

@Subra Bez kodu nikt nie może zrozumieć twojego problemu. Lepiej zadać nowe pytanie z niezbędnym kodem. – Dharmendra

10

Na przykład:

ListView lv = getListView(); 

     lv.setAdapter(listAdapter); 

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

       Intent i = new Intent(More.this, NextActvity.class); 
       //If you wanna send any data to nextActicity.class you can use 
       i.putExtra(String key, value.get(position)); 

      startActivity(i); 
      } 
      }); 
Powiązane problemy