简体   繁体   中英

working with edittext and recyclerview in Android

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM