Как установить 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;
}
}
}
Он сгенерирует List, я хочу вызвать соответствующие действия на соответствующий клик, например, если пользователь щелкнет Transfer, тогда он отобразит операцию переноса,
Как я могу вызвать onClickListener в этом списке и как я могу запустить Activity on click.
Ответы
Ответ 1
вы также можете сделать это.
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
Существует два варианта обработки события click для каждой строки.
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
Например:
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);
}
});
Ответ 4
Ваш класс "Больше" должен расширять 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
}
Изменить: Забыл сказать, в вашем макете должен быть вызван ListView: android: id = "@android: id/list"