无法在回收站视图中动态添加页脚项
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 是的,侦听器会为您输入的每个字母触发。您可以做的是检查特定字符的输入(例如空格)。并且仅在输入指定字符时才在侦听器中进行插入。这样只有当用户用空格终止单词时才会创建一个新的列表条目 另一种方法是每次检查文本长度,只有在达到特定长度时才进行列表条目代码。以上是关于无法在回收站视图中动态添加页脚项的主要内容,如果未能解决你的问题,请参考以下文章