OnclickListener для отдельных элементов в строке из ListActivity с использованием SimpleCursorAdapter, чтобы привязка к БД не работала должным образом - PullRequest
1 голос
/ 12 августа 2011

Пожалуйста, помогите.

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

Это "вроде" работает, но требуется много времени, чтобы реагировать на клики пользователей. Что я делаю не так?

Заранее спасибо,

Итак, я попробовал следующий код в

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    // Get the item that was clicked
    Cursor c = (Cursor) this.getListAdapter().getItem(position);

    // c.moveToNext();

    prescription_id = c.getString(0);
    TextView pName = (TextView) v.findViewById(R.id.text2);
    TextView paName = (TextView) v.findViewById(R.id.text3);
    TextView rDateLabel = (TextView) v.findViewById(R.id.textView1);
    TextView rDate = (TextView) v.findViewById(R.id.text4);
    TextView rLeftLabel = (TextView) v.findViewById(R.id.text5);
    TextView rLeft = (TextView) v.findViewById(R.id.text6);
    ImageView callPhone = (ImageView) v.findViewById(R.id.Call_Pharmacy);

    pName.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    pa.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDateLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDate.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeftLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeft.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    callPhone.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Some Code
        }
    });
}

Ответы [ 2 ]

1 голос
/ 13 августа 2011

Ключевым здесь является использование макета на основе XML для вашего элемента списка. Установите для каждого индивидуально активируемого просмотра представление с двумя атрибутами android:clickable="true" и android:onClick="<your click handler>", метод должен быть реализован с этой подписью: public void <your click handler> (View v) {...} в вашей деятельности. Заметим, что вам нужно будет принять решение о разработке обработчика щелчков, чтобы перекрывать обработку (один обработчик щелчков для нескольких видов) или один обработчик представлений на просмотр, первый лучше всего подходит для случаев, когда клики практически схожи в функции, а последний, когда они разные.

Следующим шагом является реализация обработчика щелчков, ключом здесь является использование ListView.getPositionForView (View v) , чтобы можно было связать строку, данные и просмотр по щелчку.

Не забудьте реализовать ListActivity.onListItemClick () как универсальное средство для щелчка по корневому макету элемента списка и как универсальное средство для представлений, которые не имеют своих собственных onClick набор обработчиков.

Вышеупомянутая методика будет иметь хорошую производительность и использует несколько API Android для ускорения вашей разработки.

Если вы решите внедрить слушателей в код, пожалуйста, внимательно изучите getView() (как уже упоминалось), и ради производительности (если у вас есть несколько пунктов в списке) повторно используйте прослушиватели щелчков с обсуждением выше связать данные и строку.

1 голос
/ 12 августа 2011

Все эти прослушиватели onClick (те, которые находятся в отдельных вложенных представлениях одного элемента ListView), вероятно, должны присутствовать не в методе onListItemClick, а в методе getView вашего Adapter (с правильным использованием аргумента convertView).

То, как вы это делаете, кажется совершенно неправильным, возможно, ваш метод onListItemClick даже не нужен, если вы правильно реализуете различные прослушиватели onClick в нужном месте.

...