无法在Recycler View中动态添加页脚项目

时间:2019-08-02 08:28:11

标签: android android-layout listview android-fragments android-recyclerview

我正在创建一个列表,其中每个列表项都有3个小部件,即2个EditText和1个Spinner。我有一个添加按钮,可以在列表中添加新视图。

我创建了两个视图,一个是带有所有带有十字按钮的3个小部件的标题视图,和带有带有添加按钮的所有3个小部件的页脚视图。

最初显示我的页脚视图。当我在该页脚视图的所有3个小部件上输入值时,我想将这些值添加到模型中而不单击它。现在,当我单击“添加”按钮时,它可以正常工作,但是当所有值都填满时,我想添加它而不单击“添加”按钮。

请帮助。

if (holder instanceof FooterViewHolder) {
    final FooterViewHolder footerHolder = (FooterViewHolder) holder;

    unitlist = new ArrayList<>();
   // unitlist.add(0, "Select");
    unitlist.add(0, "unit");
    unitlist.add(1, "gram");
    unitlist.add(2, "litre");

    spinnerAdapter = new ArrayAdapter<String>(activity, R.layout.spinner, unitlist) {
        @Override
        public boolean isEnabled(int position) {
            return true;
        }
    };

    spinnerAdapter.setDropDownViewResource(R.layout.spinner_dropdown);

    ((FooterViewHolder) holder).spinner.setAdapter(spinnerAdapter);

    //spinner select type of life stage

    ((FooterViewHolder) holder).spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            ((TextView) parent.getChildAt(0)).setTextColor(Color.BLACK);

            unitName = parent.getItemAtPosition(position).toString();
            selected_item = ((FooterViewHolder) holder).spinner.getSelectedItemPosition();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            //Another interface callback
        }
    });


    footerHolder.ibAddMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (footerHolder.etIngredientName.getText().length() == 0) {
                Toast.makeText(activity, R.string.pls_enter_ingredient_name, Toast.LENGTH_SHORT).show();
            } else if (((FooterViewHolder) holder).spinner.getSelectedItem().toString().trim().equals("Select")) {
                Toast.makeText(activity, R.string.pls_enter_unit_conversion_value, Toast.LENGTH_SHORT).show();

            } else if (footerHolder.etAmount.getText().length() == 0) {
                Toast.makeText(activity, R.string.pls_enter_qty, Toast.LENGTH_SHORT).show();

            } else {

                ArrayList<ModelInventory> modelInventoryArrayList = new ArrayList<>();
                modelInventoryArrayList = databaseHelper.getInventoryByName(footerHolder.etIngredientName.getText().toString());

                Log.e("TAG", "checkUnit:d "+footerHolder.etAmount.getText().toString() + "))" +modelInventoryArrayList.size());

                if(modelInventoryArrayList.size() >0){

                    for(ModelInventory modelInventory : modelInventoryArrayList){

                        Log.e("TAG", "checkUnit: "+modelInventory.getItemQty() +")))"+unitName );
                        if(modelInventory.getItemQty().equals(unitName)){
                            fragmentNewRecipe.addView(footerHolder.etAmount.getText().toString(), position, footerHolder.etIngredientName.getText().toString(), unitName);

                        }else{
                            Toast.makeText(activity,R.string.measurement_diff,Toast.LENGTH_SHORT).show();
                        }
                    }
                }else{
                    fragmentNewRecipe.addView(footerHolder.etAmount.getText().toString(), position, footerHolder.etIngredientName.getText().toString(), unitName);

                }
            }
        }
    });
}

查看:

View

1 个答案:

答案 0 :(得分:0)

尝试将侦听器添加到每个编辑文本中,并且每当检测到输入更改时,检查所有输入是否都为空,然后添加到列表中

                footerHolder.etAmount.addTextChangedListener(new TextWatcher() {
                    public void afterTextChanged(Editable s) {
                        if (s.toString() != ""){
                            if (footerHolder.etIngredientName.getText().length() != 0) {
                                //Add item to your list
                            }
                        }

                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

                        public void onTextChanged(CharSequence s, int start, int before, int count) {}
                    });
                footerHolder.etIngredientName.addTextChangedListener(new TextWatcher() {

                        public void afterTextChanged(Editable s) {
                            if (s.toString() != ""){
                                if (footerHolder.etAmount.getText().length() != 0) {
                                    //Add item to your list
                                }
                            }

                            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

                            public void onTextChanged(CharSequence s, int start, int before, int count) {}
                        });