Получить Specifi c InflatedView Android Студия - PullRequest
0 голосов
/ 29 марта 2020

Это мой item_simple_itemview.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp">

    <TextView
        android:id="@+id/simple_text"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        tools:text="Test"
        android:text="This is some temp text" />

    <Button
        android:id="@+id/btn"
        android:layout_width="208dp"
        android:layout_height="50dp"
        android:layout_marginTop="16dp"
        android:minWidth="10dip"
        android:minHeight="10dip"
        android:onClick="onChangeClick" />

</LinearLayout>

Я создал RecyclerView с несколькими экземплярами этого xml файла, так как они являются "элементами" в списке.

My onChangeClick выглядит следующим образом:

public void onChangeClick(View view) {
        View inflatedView = getLayoutInflater().inflate(R.layout.item_simple_itemview, null);

        TextView textView = inflatedView.findViewById(R.id.simple_text);
        Toast.makeText(getApplicationContext(), (CharSequence) ("Text: " + textView.getText()), 
            Toast.LENGTH_SHORT);
}

Я программно добавляю экземпляры item_simple_itemview s к RecyclerView и изменяю текст в simple_text и btn , Когда я нажимаю кнопку на кнопке отдельного элемента, я получаю уведомление о тосте Text: this is some temp text.

Как сделать так, чтобы текст ссылался на этот конкретный c экземпляр элемента, а не на основание xml сам файл?

1 Ответ

1 голос
/ 29 марта 2020

android:onClick, как вы его используете, древний . Ваш второй раз, когда я видел это сегодня, после того, как я не видел его годами. В частности, android:onClick направляет событие click методу, который вы реализуете на Activity. Это не особенно гибко.

И, в вашем случае, если у вас есть N кнопок, каждая из этих N кнопок будет вызывать один и тот же метод. В то время как View передается в ваш метод в качестве параметра, это не обязательно помогает определить, какая строка в вашем RecyclerView была нажата.

Я рекомендую удалить android:onClick. Вместо этого в onBindViewHolder(), как часть вашей работы, позвоните setOnItemClickListener() на Button. Используемое там OnClickListener (или лямбда-выражение) может ссылаться на параметр position, переданный в onBindViewHolder(), если вы сделаете position равным final. Таким образом, ваш обработчик кликов имеет прямой доступ к position, и оттуда вы можете узнать, какому конкретному элементу в списке соответствует position.

...