简体   繁体   English

在Android中使用edittext和recyclerview

[英]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 我希望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) {

                }
            });

    }
} }

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. 我希望内容显示onclick按钮,但是它不起作用。 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. 您需要在将适配器设置为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 另外,您需要更改适配器实现以接收ArrayList<Book>而不是String[]作为第二个参数

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 这是我的新适配器代码,这也是新的mainactivity代码

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 请我需要快速答复谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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