У меня есть InfoListAdapter
, который использует следующий код для заполнения представления в списке:Установка onClickListener для элемента ListView с помощью ViewHolder
public InfoListAdapter(final Context context) {
super(context, 0);
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.info_list_item, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.populateViews(getItem(position));
return convertView;
}
}
Я интересно, как я могу следовать этому ViewHolder
и неподвижное добавить onClickListener
который запустит другую активность DetailListActivity
при нажатии. Мой страж должен был внести изменения mListener
с использованием существующего метода populateViews
.
Излишне говорить, что это не работает. Я думаю, что часть проблемы здесь заключается в том, что поскольку mListener
имеет значение null, когда я устанавливаю onClickListener
, эта ссылка сохраняется даже после изменения значения mListener
. Но более глубокий вопрос заключается в том, как do Я установил что-то вроде этого, где я могу использовать шаблон ViewHolder
и позволить populateViews
сделать декор (с точки зрения добавления слушателя к действию нажатия)?
class ViewHolder {
private TextView mTextViewDisplayName;
private OnClickListener mListener;
private Context mContext;
public ViewHolder(final View view) {
mTextViewDisplayName = (TextView) view.findViewById(R.id.tv_displayname);
view.setOnClickListener(mListener);
mContext = view.getContext();
}
public void populateViews(final Info infoItem) {
mTextViewDisplayName.setText(infoItem.displayName);
mListener = new OnClickListener() {
public void onClick(View view0) {
Intent mIntent = new Intent(mContext, DetailActivity.class);
mIntent.putExtra(EMService.INTENT_EXTRA_DETAIL_VIEW_SOMEPARAM, 0);
startActivityForResult(mIntent, 0);
}
};
}
}
И как я могу связать, что слушатель onItemClick к ListView моей деятельности в? –
Чтобы быть ясным, я попробовал 'this.getListView(). SetOnItemClickListener (this)', но является ли это идеальным способом для этого? Зачем мне даже связывать его, когда я реализовал интерфейс 'OnItemClickListener'? Не следует ли это автоматически делать это? –
@Luksprog Я определенно «расширил ListActivity» и «реализовал OnItemClickListener» и добавил переопределение '(void) onItemClick', но он работает только, когда я связываю его с помощью' this.getListView(). SetOnItemClickListener (this) ' , Если у меня нет этой строки, ничего не происходит с щелчком элемента. –