Если вы хотите, чтобы кнопки (и что-нибудь еще), чтобы иметь уникальные действия щелкните в макете, вам нужно написать специальный адаптер и переопределить getView()
:
public MyAdapter(Context context, List<T> objects) {
...
inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
// Inflate and initialize your layout
convertView = inflater.inflate(R.layout.grid_item, parent, false);
holder = new ViewHolder();
holder.btnOne = (Button) convertView.findViewById(R.id.btnOne);
holder.btnOne.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Do something
}
});
// etc, etc...
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
// Do things that change for every grid item here, like
holder.textOne.setText(getItem(position));
return convertView;
}
class ViewHolder {
Button btnOne;
TextView textOne;
}
Эта концепция была объяснена достаточно хорошо в различных Google Talks за эти годы, here is one.
Добавление
Я пытаюсь установить текст TextView внутри колонки GridView при нажатии на кнопку внутри GridView.
Вы должны быть в состоянии получить доступ к любому виду в макете в onClick()
методе, прося родительским View, а затем получать ViewHolder:
public void onClick(View v) {
ViewHolder holder = (ViewHolder) ((View) v.getParent()).getTag();
// Do something with holder.textOne now
}
(Это предполагает, что макет не имеет никакого вложенные ViewGroups, поэтому настроить соответствующим образом.)
вы получите ответы гораздо лучшего качества, если вы разместите свой код, чтобы сопровождать это. – mango