Как я могу установить onClickListener на ArrayAdapter? - PullRequest
44 голосов
/ 23 декабря 2011

Я делаю урок, как показано ниже

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

Будет сгенерирован список, я хочу вызвать соответствующие действия по соответствующему клику, например, если пользователь нажал кнопку «Передача», то будет отображено действие переноса, Как я могу вызвать onClickListener в этом списке и как я могу запустить Activity по клику.

Ответы [ 4 ]

51 голосов
/ 23 декабря 2011

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

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

        });
49 голосов
/ 23 декабря 2011

Существует два варианта обработки события щелчка для каждой строки.

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) {

    }
});
12 голосов
/ 23 декабря 2011

Например:

 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);
            }
          });
1 голос
/ 23 декабря 2011

Ваш класс "Больше" должен расширять ListActivity вместо Activity, тогда вы можете переопределить 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 должен бытьВызванный: android: id = "@ android: id / list"

...