6

私はと 2 つの Android を持っていGridViewます。Grid は正常に表示されますが、 内でボタン イベントを処理するのが難しいと感じています。私はAndroidが初めてです。ImageViewTextViewButton'sGridView

どんな助けでも大歓迎です。

ありがとう。

4

4 に答える 4

12

ボタン (およびその他のもの) に独自のクリック アクションをレイアウトで持たせたい場合は、カスタム アダプターを記述してオーバーライドする必要があります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 がないことを前提としているため、それに応じて調整してください。)

于 2012-11-04T17:07:17.767 に答える
0

onItemClickListenerを使用する必要があります

 gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, 
                long row) {
 }

位置は、クリックされた要素について教えてくれるはずです。しかし、gridviewには、クリックリスナー(ボタンなど)を使用したオブジェクトの処理に問題があると思います。たぶん、他のコンテナのグリッドビューを変更したほうがよいでしょう。グリッドビューが必要な場合は、画面内のキャッチ位置にsetOnTouchListenerを使用して、手動のonitemclicklistenerを作成できます。

于 2012-11-04T17:01:16.407 に答える