Работа с edittext и recyclerview в Android

Я хочу, чтобы содержимое edittext отображалось в recyclerview, но оно не работает, это адаптер

package c.androidchatapp.recyclerview.Adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import c.androidchatapp.recyclerview.Model.Book;
import c.androidchatapp.recyclerview.R;

import java.util.ArrayList;
import java.util.List;


public class BookAdapter extends 
RecyclerView.Adapter<BookAdapter.BookViewHolder>{

private  LayoutInflater layoutInflater;
private EditText edittext1;
private Button button1;
public static ArrayList<Book> bookList;
public BookAdapter(Context context, String[] mDataset) {
    layoutInflater = LayoutInflater.from(context);
    bookList = new ArrayList<Book>(mDataset.length);
}
@Override
public BookViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.book_list_row, parent, false);
    return new BookViewHolder(itemView);

}
@Override
public void onBindViewHolder(BookViewHolder holder, int position) {
    holder. editText.setText(bookList.get(position).getEditTextValue());
    Log.d("print","yes");
     }

    @Override
    public int getItemCount() {
    return bookList.size();
}
    public class BookViewHolder extends RecyclerView.ViewHolder {

        protected EditText editText;

        public BookViewHolder(View itemView) {
            super(itemView);

            editText = (EditText) itemView.findViewById(R.id.edittext1);

            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    bookList.get(getAdapterPosition()).setEditTextValue(editText.getText().toString());
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });

    }
} }

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

package c.androidchatapp.recyclerview;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;
import android.widget.Button;
import android.widget.TextView;
import c.androidchatapp.recyclerview.Adapter.BookAdapter;
import c.androidchatapp.recyclerview.Model.Book;


import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


private Button button1;
public ArrayList<Book> bookList;
private RecyclerView recyclerView;
private BookAdapter mAdapter;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    button1 = (Button) findViewById(R.id.button1);
    final TextView title = (TextView) findViewById(R.id.title);
    bookList = populateList();

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());

    recyclerView.setLayoutManager(mLayoutManager);

    recyclerView.setItemAnimator(new DefaultItemAnimator());

// recyclerView.addItemDecoration(new ItemDividerDecoration(this, LinearLayoutManager.VERTICAL));

    recyclerView.setAdapter(mAdapter);



    initBookData();

}

private ArrayList<Book> populateList() {

        ArrayList<Book> list = new ArrayList<>();

        for(int i = 0; i < 8; i++){
            Book editModel = new Book();
            editModel.setEditTextValue(String.valueOf(i));
            list.add(editModel);
        }

        return list;
    }


private void initBookData() {


}
}

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

0
0
48
2

Ответы 2

Вам необходимо инициализировать ваш адаптер, прежде чем устанавливать его для своего recyclerview.

Что-то типа

BookAdapter mAdapter = new BookAdapter(this, bookList);

перед этой строкой

recyclerView.setAdapter(mAdapter);

Кроме того, вам необходимо изменить реализацию адаптера, чтобы получить ArrayList<Book> вместо String[] в качестве второго аргумента.

после того, как я сделал все, что вы меня просите, он сообщает об ошибке для меня на c.androidchatapp.recyclerview.Adapter.BookAdapter $ BookViewHo‌ lder. <init> (BookAdap‌ ter.java:60) на c.androidchatapp.recyclerview. Adapter.BookAdapter.onCreateVi‌ ewHolder (BookAdapter‌ .java: 38) в c.androidchatapp.recyclerview.Adapter.BookAdapter.onCreateVi‌ ewHolder (BookAdapter‌ .java: 24)

Odejinmi Tolulope Abraham 10.12.2018 12:38

@OdejinmiTolulopeAbraham можете ли вы обновить или предоставить свой текущий код?

Tiago Ornelas 10.12.2018 13:38
package c.androidchatapp.recyclerview.Adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import c.androidchatapp.recyclerview.Model.Book;
import c.androidchatapp.recyclerview.R;

import java.util.ArrayList;
import java.util.List;

public class BookAdapter extends RecyclerView.Adapter<BookAdapter.BookViewHolder>{

private  LayoutInflater layoutInflater;
private EditText edittext1;
private Button button1;
public static ArrayList<Book> bookList;
public BookAdapter(Context context, ArrayList<Book> mDataset) {
    layoutInflater = LayoutInflater.from(context);
    bookList = new ArrayList<Book>(mDataset);
}
@Override
public BookViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.book_list_row, parent, false);
    return new BookViewHolder(itemView);

}
@Override
public void onBindViewHolder(BookViewHolder holder, int position) {
    holder. editText.setText(bookList.get(position).getEditTextValue());
    Log.d("print","yes");
     }

    @Override
    public int getItemCount() {
    return bookList.size();
}
    public class BookViewHolder extends RecyclerView.ViewHolder {

        protected EditText editText;

        public BookViewHolder(View itemView) {
            super(itemView);

            editText = (EditText) itemView.findViewById(R.id.edittext1);

            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    bookList.get(getAdapterPosition()).setEditTextValue(editText.getText().toString());
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });

    }
} }

это мой новый код адаптера, и это также новый код основной активности

package c.androidchatapp.recyclerview;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;
import android.widget.Button;
import android.widget.TextView;
import c.androidchatapp.recyclerview.Adapter.BookAdapter;
import c.androidchatapp.recyclerview.Model.Book;


import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


private Button button1;
public ArrayList<Book> bookList;
private RecyclerView recyclerView;
private BookAdapter mAdapter;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    button1 = (Button) findViewById(R.id.button1);
    final TextView title = (TextView) findViewById(R.id.title);
    bookList = populateList();

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());

    recyclerView.setLayoutManager(mLayoutManager);

    recyclerView.setItemAnimator(new DefaultItemAnimator());

// recyclerView.addItemDecoration(new ItemDividerDecoration(this, LinearLayoutManager.VERTICAL));
BookAdapter mAdapter = new BookAdapter(this, bookList);
    recyclerView.setAdapter(mAdapter);



    initBookData();

}

private ArrayList<Book> populateList() {

        ArrayList<Book> list = new ArrayList<>();

        for(int i = 0; i < 8; i++){
            Book editModel = new Book();
            editModel.setEditTextValue(String.valueOf(i));
            list.add(editModel);
        }

        return list;
    }


private void initBookData() {


}
}

пожалуйста, мне нужен быстрый ответ спасибо

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