无法在回收站视图中动态添加页脚项

Posted

技术标签:

【中文标题】无法在回收站视图中动态添加页脚项【英文标题】:Not able to add footer item in Recycler View dynamically 【发布时间】:2019-12-10 20:28:13 【问题描述】:

我正在创建一个列表,其中每个列表项都有 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);

                
            
        
    );

查看:

【问题讨论】:

【参考方案1】:

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

                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) 
                        );

【讨论】:

我之前尝试过这个解决方案,但是在文本更改侦听器上它添加了更多列表,因为我在编辑文本中添加了 tet 是的,侦听器会为您输入的每个字母触发。您可以做的是检查特定字符的输入(例如空格)。并且仅在输入指定字符时才在侦听器中进行插入。这样只有当用户用空格终止单词时才会创建一个新的列表条目 另一种方法是每次检查文本长度,只有在达到特定长度时才进行列表条目代码。

以上是关于无法在回收站视图中动态添加页脚项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在静态表视图底部添加动态表视图?

如何将页脚按钮添加到我的回收站视图

当列表视图滚动到达末尾时添加列表视图页脚

xCode:从动态添加的子视图中激活 IBAction

动态添加的页脚不会停留在 ASP.NET 页面的底部

动态添加视图并设置参数和规则无法正常工作(android)