Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android RecyclerView';s EditText在输入数据后交换其位置并向下滚动_Java_Android_Android Edittext_Android Recyclerview - Fatal编程技术网

Java Android RecyclerView';s EditText在输入数据后交换其位置并向下滚动

Java Android RecyclerView';s EditText在输入数据后交换其位置并向下滚动,java,android,android-edittext,android-recyclerview,Java,Android,Android Edittext,Android Recyclerview,我有一个由TextView和EditText组成的RecyclerView,对于TextView和RecyclerView来说,我的工作非常好,但是对于EditText,如果我在第一个单元格中输入值并继续输入其他单元格并滚动,则上面输入的值将不存在 public class Assesment_MarkcardAdapter extends RecyclerView.Adapter<Assesment_MarkcardAdapter.ContactViewHolder> {

我有一个由
TextView
EditText
组成的
RecyclerView
,对于
TextView
RecyclerView
来说,我的工作非常好,但是对于
EditText
,如果我在第一个单元格中输入值并继续输入其他单元格并滚动,则上面输入的值将不存在

public class Assesment_MarkcardAdapter extends RecyclerView.Adapter<Assesment_MarkcardAdapter.ContactViewHolder> {

    private String[] mDataset;

    public Assesment_MarkcardAdapter(String[] myDataset)
    {
        mDataset = myDataset;
    }

    private List<Assesment_cardinfo> contactList;
    private static String LOG_TAG = "Assesment_MarkcardAdapter";


    public Assesment_MarkcardAdapter(List<Assesment_cardinfo> contactList) {
        this.contactList = contactList;
    }


    @Override
    public int getItemCount() {
        return contactList.size();
    }

    @Override
    public void onBindViewHolder(ContactViewHolder contactViewHolder, int i)
    {

        mDataset = new String[contactList.size()];
        Assesment_cardinfo ci = contactList.get(i);
        contactViewHolder.studentname.setText(ci.getStudentname());
        contactViewHolder.studentid.setText(ci.getStudentid());
        contactViewHolder.grade.setText(ci.getGrade());
        contactViewHolder.improvement.setText(ci.getImprovements());
        contactViewHolder.grade.setTag(ci);
        contactViewHolder.improvement.setTag(ci);
        contactViewHolder.myCustomEditTextListener.updatePosition(i);
        contactViewHolder.myCustomEditTextListener2.updatePosition2(i);
        //contactViewHolder.grade.setText(mDataset[i]);
    }

    @Override
    public Assesment_MarkcardAdapter.ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
    {
        View itemView = LayoutInflater.
                from(viewGroup.getContext()).
                inflate(R.layout.assesment_markcard, viewGroup, false);

        return new ContactViewHolder(itemView , new MyCustomEditTextListener(),new MyCustomEditTextListener2());
    }

    public static class ContactViewHolder extends RecyclerView.ViewHolder {

        public MyCustomEditTextListener myCustomEditTextListener;
        public MyCustomEditTextListener2 myCustomEditTextListener2;

        protected TextView studentname;
        protected TextView studentid;
        protected EditText grade;
        protected EditText improvement;


        public ContactViewHolder(View v, MyCustomEditTextListener myCustomEditTextListener, MyCustomEditTextListener2 myCustomEditTextListener2 ) {
            super(v);
            studentname = (TextView) v.findViewById(R.id.txt_student_name);
            studentid = (TextView) v.findViewById(R.id.txt_student_id);
            grade = (EditText) v.findViewById(R.id.edtxt_grade);
            this.myCustomEditTextListener = myCustomEditTextListener;
            grade.addTextChangedListener(myCustomEditTextListener);
            improvement = (EditText) v.findViewById(R.id.edtxt_improvement);
            this.myCustomEditTextListener2 = myCustomEditTextListener2;
            improvement.addTextChangedListener(myCustomEditTextListener2);

        }

    }
    private class MyCustomEditTextListener implements TextWatcher
    {
        private int position;

        public void updatePosition(int position)
        {
            this.position = position;
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
        {
            // no op
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
        {
            contactList.get(position).setGrade(charSequence.toString());
        }

        @Override
        public void afterTextChanged(Editable editable) {
            // no op
        }
    }

    private class MyCustomEditTextListener2 implements TextWatcher
    {
        private int position;

        public void updatePosition2(int position)
        {
            this.position = position;
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
        {
            // no op
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
        {
            contactList.get(position).setImprovements(charSequence.toString());
        }

        @Override
        public void afterTextChanged(Editable editable) {
            // no op
        }
    }
    public List<Assesment_cardinfo> getStudentLists()
    {
        return contactList;
    }
}
public class assessment\u markcardapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
公共评估\u MarkcardAdapter(字符串[]myDataset)
{
mDataset=myDataset;
}
私人名单联系人名单;
私有静态字符串LOG\u TAG=“assessment\u markcardapter”;
公共评估\u MarkcardAdapter(列表联系人列表){
this.contactList=联系人列表;
}
@凌驾
public int getItemCount(){
返回contactList.size();
}
@凌驾
BindViewHolder上的公共无效(ContactViewHolder ContactViewHolder,int i)
{
mDataset=新字符串[contactList.size()];
assessment_cardinfo ci=联系人列表。获取(i);
contactViewHolder.studentname.setText(ci.getStudentname());
contactViewHolder.studentid.setText(ci.getStudentid());
contactViewHolder.grade.setText(ci.getGrade());
contactViewHolder.improvement.setText(ci.getImprovements());
contactViewHolder.grade.setTag(ci);
contactViewHolder.improvement.setTag(ci);
contactViewHolder.myCustomEditTextListener.updatePosition(i);
contactViewHolder.myCustomEditTextListener2.updatePosition2(i);
//contactViewHolder.grade.setText(mDataset[i]);
}
@凌驾
公共评估\u MarkcardAdapter.ContactViewHolder onCreateViewHolder(视图组视图组,int i)
{
视图项视图=布局调整器。
来自(viewGroup.getContext())。
充气(R.layout.Assessment_markcard,viewGroup,false);
返回新的ContactViewHolder(itemView,新的MyCustomEditTextListener(),新的MyCustomEditTextListener2());
}
公共静态类ContactViewHolder扩展了RecyclerView.ViewHolder{
公共MyCustomEditTextListener MyCustomEditTextListener;
公共MyCustomEditTextListener2 MyCustomEditTextListener2;
受保护的文本视图studentname;
受保护的文本视图studentid;
保护文本等级;
文本改进;
公共联系人视图持有者(视图v、MyCustomEditTextListener、MyCustomEditTextListener、MyCustomEditTextListener2、MyCustomEditTextListener2){
超级(五);
studentname=(TextView)v.findViewById(R.id.txt\u student\u name);
studentid=(TextView)v.findViewById(R.id.txt\u student\u id);
等级=(编辑文本)v.findViewById(R.id.edtxt_等级);
this.myCustomEditTextListener=myCustomEditTextListener;
grade.addTextChangedListener(myCustomEditTextListener);
改进=(EditText)v.findViewById(R.id.edText_改进);
this.myCustomEditTextListener2=myCustomEditTextListener2;
改进.addTextChangedListener(myCustomEditTextListener2);
}
}
私有类MyCustomEditTextListener实现TextWatcher
{
私人职位;
公共无效更新位置(整数位置)
{
这个位置=位置;
}
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i2,int i3)
{
//无操作
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i2,int i3)
{
contactList.get(position.setGrade(charSequence.toString());
}
@凌驾
public void PostTextChanged(可编辑){
//无操作
}
}
私有类MyCustomEditTextListener2实现TextWatcher
{
私人职位;
公共无效更新位置2(内部位置)
{
这个位置=位置;
}
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i2,int i3)
{
//无操作
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i2,int i3)
{
contactList.get(position.setImprovements(charSequence.toString());
}
@凌驾
public void PostTextChanged(可编辑){
//无操作
}
}
公共列表GetStudentList()
{
返回联系人列表;
}
}

将输入字段放在回收器视图中真的很糟糕。尝试重新构建您的UI设计。回收器视图应始终具有只读字段。即使这样,您也可以尝试动态创建视图并将其添加到rooot布局中。 例如,有一个XML文件,其中线性布局将是您的根。再创建一个XML文件,并继续将此模板添加到根视图中

可能是这样的 这将是您的根布局instear od recycler视图

<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

//Create a template layout.You need to add the property i am just skippint it
<LinearLayout>
<TextView/>
<EditText/>


// In you activity write a method to create a view dynamically from template and add it to your root Layout. 

LinearLayout rootLayout=(LinearLayout)findViewById(R.id.container);

createChilds(rootLayout);

private void createChilds(LinearLayout rootLayout)
{
LinearLayout  childContainer=(LinearLayout)LayoutInflater.from(context).inflate(R.layout.template_layout,null);
TextView tv=childContainer.findViewById(R.id.textviewid);
EditText et=childContainer.findViewById(R.id.edittextviewid);

// you can register for textwatcher for edit text if you want

//Add it to roolayout
rootLayout.addView(childContainer);
}

//创建一个模板布局。你需要添加属性,我只是跳过它
//在“活动”中,编写一个从模板动态创建视图的方法,并将其添加到根布局中。
LinearLayout rootLayout=(LinearLayout)findViewById(R.id.container);
createChilds(rootLayout);
私有void createChilds(LinearLayout rootLayout)
{
LinearLayout childContainer=(LinearLayout)LayoutInflater.from(context).flate(R.layout.template_布局,null);
TextView tv=childContainer.findViewById(R.id.textviewid);
EditText et=childContainer.findViewById(R.id.edittextviewid);
//如果需要,您可以注册textwatcher以编辑文本
//将其添加到roolayout
rootLayout.addView(childContainer);
}

在您的
onBindViewHolder()中添加这两行。

设置侦听器之后,即

contactViewHolder.myCustomEditTextListener.updatePosition(i);
contactViewHolder.myCustomEditTextListener2.updatePosition2(i);
这两行代码

contactViewHolder.myCustomEditTextListener.updatePosition(i);
contactViewHolder.myCustomEditTextListener2.updatePosition2(i);
holder.editQty.addTextChangedListener
 holder.editQty.addTextChangedListener(null);
 holder.editQty.addTextChangedListener(new TextWatcher())