Android OnClickListener не работает в GridView (только 2.2) - PullRequest
4 голосов
/ 08 августа 2010

У меня есть вид сетки кнопок, сгенерированных CursorAdapter.Когда CursorAdapter передается в Gridview, представление отображается правильно, однако первый элемент в сетке не запускает событие OnClickListener.

Если я выбираю другую кнопку в сетке, событие запускается правильно, однако, если я выбралПервая кнопка, затем другая кнопка, она загружает действие первой кнопки, а затем действие кнопки раздела.

При тестировании это кажется только проблемой в Android 2.2 на моем эмуляторе, мой телефон 1.5 работает, как и ожидалось.Я вытер эмулятор, но, похоже, это ничего не изменило.

public class AdapterMedia extends CursorAdapter {

    Context context;
    Cursor cursor;

    public AdapterMedia(Context context, Cursor dataset)
    {
        super(context, dataset);
        this.context = context;
        this.cursor  = dataset;
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup arg2)
    {
        Button imageView;

        imageView = new Button(context);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setPadding(8, 8, 8, 8);
        imageView.setId(cursor.getInt(0));
        imageView.setText(cursor.getString(1));
        imageView.setOnClickListener(buttonClickListener);

        return imageView;
    }

    @Override
    public void bindView(View arg0, Context arg1, Cursor arg2)
    {
        Button imageView = (Button) arg0;

        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setPadding(8, 8, 8, 8);
        imageView.setId(cursor.getInt(0));
        imageView.setText(cursor.getString(1));
        imageView.setOnClickListener(buttonClickListener);
    }

    public OnClickListener buttonClickListener = new OnClickListener()
    {
        public void onClick(View view)
        {
            Bundle dataset = new Bundle();
            dataset.putInt("media_id", view.getId());

            Intent showMedia = new Intent(context.getApplicationContext(), MediaActivity.class);
            showMedia.putExtras(dataset);

            context.startActivity(showMedia);
        }
    };
}

1 Ответ

3 голосов
/ 07 марта 2011

Установите onItemClickListener для объекта GridView вместо установки onClickListener для каждого изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...