私はと 2 つの Android を持っていGridView
ます。Grid は正常に表示されますが、 内でボタン イベントを処理するのが難しいと感じています。私はAndroidが初めてです。ImageView
TextView
Button's
GridView
どんな助けでも大歓迎です。
ありがとう。
私はと 2 つの Android を持っていGridView
ます。Grid は正常に表示されますが、 内でボタン イベントを処理するのが難しいと感じています。私はAndroidが初めてです。ImageView
TextView
Button's
GridView
どんな助けでも大歓迎です。
ありがとう。
ボタン (およびその他のもの) に独自のクリック アクションをレイアウトで持たせたい場合は、カスタム アダプターを記述してオーバーライドする必要があります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 トークで非常によく説明されてきました。
添加
GridView 内のボタンをクリックすると、GridView 列内の TextView のテキストを設定しようとしています。
onClick()
ビューの親を要求してから ViewHolder を取得することにより、メソッドでレイアウト内の任意のビューにアクセスできる必要があります。
public void onClick(View v) {
ViewHolder holder = (ViewHolder) ((View) v.getParent()).getTag();
// Do something with holder.textOne now
}
(これは、レイアウトにネストされた ViewGroups がないことを前提としているため、それに応じて調整してください。)
onItemClickListenerを使用する必要があります
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position,
long row) {
}
位置は、クリックされた要素について教えてくれるはずです。しかし、gridviewには、クリックリスナー(ボタンなど)を使用したオブジェクトの処理に問題があると思います。たぶん、他のコンテナのグリッドビューを変更したほうがよいでしょう。グリッドビューが必要な場合は、画面内のキャッチ位置にsetOnTouchListenerを使用して、手動のonitemclicklistenerを作成できます。