5

私はそれにGridViewカスタムを持っていますView、それはButtonTextViewです。定義しましたsetOnItemClickListenerが、呼び出されなかったようです。以下のコードの平和を参照してください。

gridview = (GridView) findViewById(R.id.main_gridview);
gridview.setAdapter(new GridAdapter(this));

gridview.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) {
        Toast.makeText(getApplicationContext(), "gadsfadsf", 
            Toast.LENGTH_SHORT).show();
        Log.d("Main", "onItemClick");
    }
});
4

7 に答える 7

19

マークされた答えは一種のハックです。onclicklistenerをボタンに設定する代わりに、ButtonViewとTextViewに次のプロパティがあることを確認してください。

android:clickable="false"
于 2012-03-04T16:46:42.583 に答える
3

私も同じ問題を抱えていました。なぜ呼び出されないのかはまだわかりませんが、回避策を提案できます。

GridViewでonClickListenerを設定する代わりに、GridAdapter内のボタン自体のgetView()メソッド内で設定します。

それは私のために働いた!

于 2011-05-12T18:23:01.347 に答える
2

GridViewの一部のアイテムがフォーカスを奪っている可能性があります。グリッド内にある要素にこれらの属性を追加してみてください。

android:focusable="false"
android:focusableInTouchMode="false"
于 2016-02-29T13:43:02.787 に答える
1

を設定する代わりに、メソッド内の自分自身に 設定しonClickListenerます。GridView
ButtonGridAdaptergetView()

それは私のために働いた!

于 2011-09-24T09:31:14.443 に答える
1

私も同じ問題を抱えていました。イベントgrid.itemClickListenerは開始されませんでした。

私の場合、2人のリスナーがいました。grid.itemClickListenerもう1人はアイテムのレイアウト内にclickListener接続されていました。Button

しばらくレイアウトをいじった後、アイテムのレイアウト内にウィジェットがあるとfocusable=trueitemClickListenerが起動されないことに気付きました。とはいえclickListenerButtonうまくいきました。

多分それはあなたの場合でした。とにかく、この情報は同じ問題に直面している他のユーザーにとって役立つかもしれないと思います。

于 2013-07-04T14:10:38.737 に答える
1

CodingUserに感謝します

私たちが行っていたのは、GridView内のレイアウトに直接アクセスすることであるため、onItemClickListenerは、アイテムへのアクセスが混乱していることに気付きます。

したがって、解決策は、アダプター内(通常はArrayAdapter)にonClickListenerを適用することです。

だから私が言おうとしているのは:

public View getView(int position, View convertView, ViewGroup parent) {

            //Here row is a view and we can set OnClickListener on this
    final View row;
    ViewHolder holder = null;

    if (convertView == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        //Here we inflate the layout to view (linear in my case)
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new ViewHolder();
        holder.imageTitle = (TextView) row.findViewById(R.id.text);
        holder.image = (ImageView) row.findViewById(R.id.image);
        row.setTag(holder);
    } else {
        row = convertView;
        holder = (ViewHolder) row.getTag();
    }

    ImageItem item = data.get(position);
    holder.imageTitle.setText(item.getTitle());
    holder.image.setImageBitmap(item.getImage());

    //Now get the id or whatever needed
    row.setId(position);
    // Now set the onClickListener
    row.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Clicked" + row.getId() + "!!",
                    Toast.LENGTH_SHORT).show();
        }
    });
    return row;
}
于 2014-01-22T11:37:10.387 に答える
0

GridViewのアダプタで表示用のOnClickを設定できます。

public View getView(final int position, View convertView, ViewGroup parent) {
    ObjMenuVideo objListVideo = mListMenuVideo.get(position);
    final ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_video_of_kind, null);
        holder.tv_number_views = (TextView) convertView
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.tv_number_views.setText(String.valueOf(objListVideo.getViews()));
    convertView.setId(position);
    convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent menuVideoIntent = new Intent(mContext,
                    ActivityDetailVideo.class);
            mContext.startActivity(menuVideoIntent);
        }
    });

    return convertView;
}
于 2015-06-30T02:59:38.220 に答える