I want edittext content to show on a recyclerview but it is not working this is the adapter
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) {
}
});
}
} }
and here is my main activity i use to get the code
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() {
}
}
I want the content to display onclick button but it is not working. I have tried different method but still the same thing. you can tell me where my error is and give me the correct to put there or edit the code I post and send me the correct one for easy correction.
You need to initialize your adapter before setting it to your recyclerview.
Something like
BookAdapter mAdapter = new BookAdapter(this, bookList);
before this line
recyclerView.setAdapter(mAdapter);
Also, you need to change your adapter implementation to receive an ArrayList<Book>
instead of a String[]
as a second argument
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) {
}
});
}
} }
this is my new adapter code and this is the new mainactivity code too
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() {
}
}
please i need quick respondse thanks
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.