2011-12-23 7 views
32

Делаю класс вроде как нижеКак установить onClickListener на 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; 
     } 
    } 
} 

Он будет генерировать список, я хочу назвать соответствующие мероприятия по соответствующей кнопке, как если пользователю Нажмите Transfer, то он будет показывать передачи активности, Как я могу позвонить onClickListener в этом списке и как я могу запустить Activity on click.

+0

сделать вы хотите установить OnClickListener по каждому пункту вашего ListView или TextViews из каждый элемент или что? – Houcine

+0

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

ответ

39

вы также можете сделать так ..

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

Поместите это прямо под тем, где вы установили адаптер на moreListView.setAdapter (listAdapter); – localhost

+0

Отличный .. :) работал очень хорошо..thankyou .. – Lal

1

Ваш «Подробнее» класс должен расширять ListActivity вместо активности, то вы можете переопределить 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: Забыла сказать, в макете ваш ListView должен называться: андроид: идентификатор = «@ андроид: идентификатор/список»

+0

и как установить onClick прослушиватель на каждый элемент? –

+0

Каждый элемент получит клик. вы просто знаете, какой из них использует позицию щелкнутого элемента, например. MoreItems [position] – Johann

+0

и следует ли нам реализовать onclicklistner или нет? –

45

Есть два варианта, чтобы обработать за каждый клик события ряд.

1) Если ваш класс расширяет ListActivity, вы можете переопределить следующий метод.

@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) Обрабатывать нажмите событие строки в getView() метода

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - для рассмотрения как сценарий .. !! –

+0

2-й метод разбивается после onclik на элемент поиска/обновляется в виде списка при вызове намерения внутри метода onclick! любое решение для этого? .. Проблема возникает, когда мы используем собственный фильтр поиска. –

+0

@ Субра Без кода никто не может понять вашу проблему. Лучше спросите новый вопрос с необходимым кодом. – Dharmendra

10

Например:

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); 
      } 
      }); 
Смежные вопросы