Выходное значение RecyclerView в текстовое представление

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

public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        final View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_file_signature, parent, false);
        final ViewHolder holder = new ViewHolder(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final int position = holder.getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {

                    final FileInfoSignature fileInfo = values.get(position);                    
                    Toast.makeText(v.getContext(), fileInfo.getFileName(),Toast.LENGTH_SHORT).show();
                    
//there is a mistake
                    EditText text =(EditText) parent.findViewById(R.id.etIntentsDataToSign);
                    text.setText(pathFile);

        return holder;
    }

мой xml

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent">


    <androidx.recyclerview.widget.RecyclerView
        android:id = "@+id/sf_list_data"
        android:layout_width = "match_parent"
        android:layout_height = "200dp"
        android:layout_marginBottom = "10dp"
        android:background = "@color/Whitesmoke"
        android:scrollbars = "vertical"
        tools:ignore = "MissingConstraints" />

    <EditText
        android:id = "@+id/etIntentsDataToSign"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:singleLine = "true"
        app:layout_constraintEnd_toStartOf = "@+id/sf_list_data"
        app:layout_constraintStart_toEndOf = "@+id/sf_list_data"
        app:layout_constraintTop_toBottomOf = "@+id/sf_list_data" />


</androidx.constraintlayout.widget.ConstraintLayout>

вам нужно передать listener на ваш activity из адаптера, см. этот пример android.jlelse.eu/…. и в действие установить значение его edittext

Priyanka 22.12.2020 08:00
0
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно быть более «ознакомленным». Вот простое объяснение. Ваш основной макет содержит RecyclerView и EditText. Вы инициализируете их как внутри их активности, так и фрагмента:

recyclerView = findViewById(R.id.sf_list_data);
editText = findViewById(R.id.etIntentsDataToSign);
// RecyclerView stuff here
// your edit text:
editText.setText("Hi world");

Аналогично, элемент/элемент RecyclerView, в вашем случае это item_file_signature. Например, этот элемент содержит TextView, который можно инициализировать внутри ViewHolder адаптера:

public class ViewHolder extends RecyclerView.ViewHolder {
TextView itemTitle;
public ViewHolder(View view) {
            super(view);
            itemTitle = view.findViewById(R.id.text_title);
    }
}

Затем внутри onBindViewHolder:

viewHolder.itemTitle.setText("Hello World");
  1. Вам не нужно проверять, не является ли представление элементом представления переработчика, потому что это явно не так и оно находится в другом файле макета.
  2. Даже если вы правильно инициализируете этот текст редактирования и ваш проект компилируется правильно, ваше приложение обречено на принудительное закрытие из-за NullPointerException, очевидно, потому что, как я уже сказал, оно не является частью файла макета адаптера.

Обновлено: чтобы передать данные из вашего адаптера в MainActivity, в вашем адаптере создайте интерфейс onClickListener:

public interface myOnClickListener {
        
        void onRecyclerViewItemClicked(String text);
        
    }
    

Объявите это следующим образом:

private myOnClickListener myClickListener;

И создайте публичный метод, который будет вызываться из MainActivity:

public void setMyOnClickListener(myOnClickListener myClickListener) {
        this.myClickListener =  myClickListener;
    }

В onBindViewHolder:

int itemPosition = getAdapterPosition();
final FileInfoSignature fileInfo = values.get(position);                    
                            
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (myClickListener != null) {                    
                            Toast.makeText( context , fileInfo.getFileName(),Toast.LENGTH_SHORT).show();
                            myOnClickListener.onRecyclerViewItemClicked(fileInfo.getFileName() );
                        }
                    }
                });

Наконец, в вашей деятельности:

MainActivity implements YourAdapter.myOnClickListener
{
// after you initialize your adapter
adapter.setMyOnClickListener(this);
}
@Override
    public void onRecyclerViewItemClicked(String text) {
        editText.setText ( text );
    }

Насколько я понимаю таким образом мы меняем заголовок выбранного элемента, но нельзя этот заголовок передать в EditText которого нет в RecyclerView?

Евгений 22.12.2020 09:57

Другие вопросы по теме