Android-список просмотра, содержащий кнопки и текстовое представление больше не выбирается - PullRequest
0 голосов
/ 01 марта 2012

Я просматривал множество сообщений на этом сайте о просмотре списка с кнопками и просмотром текста, который не может быть выбран. Но моя проблема в другом, и я не могу сделать вывод из других связанных постов. У меня есть список, заполненный BaseAdapter. Макет представления списка - это два текстовых просмотра слева и кнопка справа для каждой строки. Я хочу, чтобы можно было выбрать как кнопку, так и всю строку списка.

Я знаю, что кнопка, когда она используется, фокусируется. Может кто-нибудь сказать мне, как я могу сделать обе кнопки, а также целый ряд - по выбору?

С уважением, Ajith

Ответы [ 3 ]

0 голосов
/ 01 марта 2012

Добавьте свойство android: onClick к своим кнопкам в макете XML.

андроид: OnClick

Имя метода в контексте этого представления, который вызывается при щелчке по представлению. Это имя должно соответствовать общедоступному методу, который принимает ровно один параметр типа View. Например, если вы укажете android: onClick = "sayHello", вы должны объявить публичный метод void sayHello (View v) вашего контекста (обычно вашей активности).

0 голосов
/ 09 сентября 2012

Я тоже столкнулся с той же проблемой, и ниже пример кода о том, как я решил ее на уровне API Android 16. Самое важное, что у вас есть android: clickable и android: focusable установите в значение true.

В вашем XML-файле строки:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/list_selector_background"
    android:clickable="true"
    android:focusable="true"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="5dp" >

    <TextView
        android:id="@+id/label"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button" />

</LinearLayout>

В базовом адаптере вы можете настроить прослушиватель на выполнение следующих действий:

public class MyBaseAdapter extends BaseAdapter {

    // Some other method implementation here...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Initialize the convertView here...

        LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.row_layout);
        Button button = (Button) convertView.findViewById(R.id.button);

        layout.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(context, "Row clicked!", Toast.LENGTH_LONG).show();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(context, "Button clicked!", Toast.LENGTH_LONG).show();
            }
        });
    }

}
0 голосов
/ 01 марта 2012

да, вы можете сделать это, установив фокусировку на false кнопки на макете, сделайте это, и вы получите решение вашей проблемы

Список будет щелкать только тогда, когда у него нет элемента, который можно фокусировать. Поэтому, если вы хотите нажать на список и кнопку, сделайте кнопку фокусируемой на false. При этом вы можете нажать как на кнопку, так и на весь список

...