Доступ к дочерним представлениям внутри ListItem, определенного как LinearLayout - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь получить значение getText () TextView, определенного в моем макете ListItem, внутри метода setOnItemClickListener.

Как правило, я хочу регистрировать данные (Id, LookupKey, DisplayName или PhoneNumber), позволяя мне получить выбранный контакт независимо от используемого списка / адаптера списка.

Я отображаю простой TextView и ImageView, видимость которых устанавливается в соответствии с данными. вот макет: contact_entry.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:baselineAligned="false"
android:layout_width="fill_parent" android:padding="5px">
            <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:textSize="16px"
                android:text="@+id/contactEntryText" android:id="@+id/contactEntryText">
            </TextView>
            <TableRow android:paddingLeft="5px" android:visibility="visible"
                android:paddingRight="5px" android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/indicator_logo_table"
                android:gravity="right">
                <ImageView android:layout_width="wrap_content"
                    android:id="@+id/imageView1"
                    android:layout_height="fill_parent"
                    android:src="@drawable/indicator">
                </ImageView>
            </TableRow>
</LinearLayout>

Адаптер, который я использую, определен ниже:

SimpleAdapterWithImageView adapter = new SimpleAdapterWithImageView(
            this, R.layout.contact_entry, cursor, fields,
            new int[] { R.id.contactEntryText });
    mContactList.setAdapter(adapter);

(Вы могли догадаться, что это для отображения Display_Name контакта из ContactsContract ContentProvider.)

и вот, наконец, mContactList.setOnItemClickListener ...

mContactList.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

LinearLayout linear = (LinearLayout) view.findViewById(R.layout.contact_entry);
Log.i("done","linear layout"); // it's not done at all ! findViewById returns null;

//this part is currently useless
TextView displayed_name = (TextView) linear.findViewById(R.id.contactEntryText);
Log.i("done","Displayed name = linear.findViewById contactentrytext");


 Toast.makeText(getApplicationContext(),
             // displayed_name.getText(), //
             //view.getContentDescription(), //
             Toast.LENGTH_SHORT).show();
    }       

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

Итак: лучший результат, который я получил за последние 36 часов (вздох), это отображение имени первого контакта, отображаемого в тосте, даже при нажатии на второй элемент ...

TextView displayed_name = (TextView) findViewById(R.id.contactEntryText);
Toast.makeText(getApplicationContext(),displayed_name.getText(),
                          Toast.LENGTH_SHORT).show();
                    }

Я пробовал такие вещи, как учебник, предоставленный Google здесь , который (я ошибаюсь? Я новичок в Android, так что не стесняйтесь мне пощечину ...) преобразует весь вид в TextView ...

плюс другие трюки, такие как view.getChildAt () и т. Д. ... для часов.

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

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

1 Ответ

1 голос
/ 17 марта 2011
LinearLayout linear = (LinearLayout) view.findViewById(R.layout.contact_entry);

Здесь ошибка - вы не должны использовать R.layout в findViewById.Обычно вам нужно использовать R.id или заменить findViewById, надувая макет.Но в этом случае вам просто нужно view из аргументов.

Заменить код в кавычках на этот:
LinearLayout linear = (LinearLayout) view;

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