在回收站视图中添加微调框,动态添加微调框后刷新微调框下拉菜单的edittext值

时间:2019-08-23 03:20:48

标签: android android-studio android-layout

当我使用按钮作为计数器在回收器视图中动态添加微调器(微调器下拉列表包含编辑文本)时,微调器旧下拉列表值设置为零)。值总是在计数增加时刷新。

public class MainActivity extends AppCompatActivity {

    private Button btn;
    private RecyclerView recyclerView;
    private CustomAdapter customAdapter;
    public ArrayList<EditModel> editModelArrayList;
    int count=0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycler);
        btn = (Button) findViewById(R.id.btn);
   Button     btnadd = (Button) findViewById(R.id.button);

        btnadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                count= (int) (count+1);

                arrayadd();


            }
        });

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this,NextActivity.class);
                startActivity(intent);
            }
        });

    }

    private void arrayadd() {
        int position=0;
       // customAdapter.notifyDataSetChanged();;
        editModelArrayList = populateList();

        customAdapter = new CustomAdapter(this,editModelArrayList);
        recyclerView.setAdapter(customAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
    }

    private ArrayList<EditModel> populateList()
    {
        ArrayList<EditModel> list = new ArrayList<>();

        for(int i = 0; i <  (count); i++){

            EditModel editModel = new EditModel();
            editModel.setEditTextValue("");;
            editModel.setEditttt("");
            editModel.setChequedate("");
            editModel.setChequeamount("");
            list.add(editModel);
        }

        return list;
    }

}

自定义适配器类

    public CustomAdapter(Context ctx, ArrayList<EditModel> editModelArrayList){

        inflater = LayoutInflater.from(ctx);

        this.editModelArrayList = editModelArrayList;
    }

    @Override
    public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.rv_item, parent, false);
        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }


    @Override
    public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, final int position) {


        holder.editText.setText(editModelArrayList.get(position).getEditTextValue());
        holder.editTexts.setText(editModelArrayList.get(position).getEditttt());
        holder.edchequedate.setText(editModelArrayList.get(position).getChequedate());
        holder.edchequeamount.setText(editModelArrayList.get(position).getChequeamount());

        Log.d("print","yes");

    }

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



    class MyViewHolder extends RecyclerView.ViewHolder{

        protected EditText editText;
        protected EditText editTexts;
        protected EditText edchequedate;
        protected EditText edchequeamount;

/*        protected EditText editTexts;
        protected EditText editTexts;*/


        public MyViewHolder(final View itemView) {
            super(itemView);


            final MaterialSpinner mts;
            mts=itemView.findViewById(R.id.et_amounts);
            mts.setItems("Cheque","DD","MO");

            mts.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() {
    @Override
    public void onItemSelected(MaterialSpinner view, int position, long id, Object item) {

        L11 = (CardView) itemView.findViewById(R.id.L11);
       L22 = (CardView) itemView.findViewById(R.id.L22);
        L33 = (CardView) itemView.findViewById(R.id.L33);

        System.out.println("itemj"+item);
        if (position==0){

            L11.setVisibility(View.VISIBLE);
            L22.setVisibility(View.GONE);
L33.setVisibility(View.GONE);

        }
        else
            if(position==1){

              //  L22.setVisibility(View.VISIBLE);
                L11.setVisibility(View.GONE);
L22.setVisibility(View.VISIBLE);
                L33.setVisibility(View.GONE);

            }
            else if (position==2){
                L33.setVisibility(View.VISIBLE);
                L11.setVisibility(View.GONE);
                L22.setVisibility(View.GONE);

        }


    }
});

            editText = (EditText) itemView.findViewById(R.id.editidaaaaaa);
                    editTexts = (EditText) itemView.findViewById(R.id.editids);


            edchequedate = (EditText) itemView.findViewById(R.id.edt_chqdate);
                  edchequeamount = (EditText) itemView.findViewById(R.id.edt_chequeamnt);



            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) {
                    editModelArrayList.get(getAdapterPosition()).setEditTextValue(editText.getText().toString());
                }
                @Override
                public void afterTextChanged(Editable editable) {

                }
            });

            editTexts.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) {

                    editModelArrayList.get(getAdapterPosition()).setEditttt(editTexts.getText().toString());
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });


            edchequedate.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) {


                    editModelArrayList.get(getAdapterPosition()).setChequedate(edchequedate.getText().toString());
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });
            edchequeamount.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) {


                    editModelArrayList.get(getAdapterPosition()).setChequeamount(edchequeamount.getText().toString());

                }
                @Override
                public void afterTextChanged(Editable editable) {

                }
            });



        }

    }

}

1 个答案:

答案 0 :(得分:0)

之所以会这样,是因为recyclerview获取了一个新的适配器并列出了每个增量。移出适配器和列表的初始化。然后以每个增量在列表中添加一些内容,然后调用notifyDataSetChanged

int count=0;
private Button btn;
private RecyclerView recyclerView;
private CustomAdapter customAdapter;
public ArrayList<EditModel> editModelArrayList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    customAdapter = new CustomAdapter(this, editModelArrayList);

    recyclerView = (RecyclerView) findViewById(R.id.recycler);
    recyclerView.setAdapter(customAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));

    btn = (Button) findViewById(R.id.btn);
    Button btnadd = (Button) findViewById(R.id.button);

    btnadd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            count= (int) (count+1);
            arrayadd();
        }
    });

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, NextActivity.class);
            startActivity(intent);
        }
    });

}

private void arrayadd() {
        // Only add the difference of the count and the length
        // the loop will only occur once since count increment is 1
    for(int i = 0; i < (editModelArrayList.size() - count); i++){
        EditModel editModel = new EditModel();
        editModel.setEditTextValue("");;
        editModel.setEditttt("");
        editModel.setChequedate("");
        editModel.setChequeamount("");

        editModelArrayList.add(editModel);
    }
    customAdapter.notifyDataSetChanged();
}