如何在 android 中实用地添加和删除布局?

Posted

技术标签:

【中文标题】如何在 android 中实用地添加和删除布局?【英文标题】:How can i add as well as remove layout pragmatically in android? 【发布时间】:2017-01-07 12:41:38 【问题描述】:

我想作为 AutoCompleteTextview 工作。但我没有在我的项目中使用自动完成文本视图。我使用了编辑文本并将其用作使用适配器的值对适配器的值进行排序的值,我正在创建一个动态按钮。但实际上,我想删除动态创建的按钮。在这种情况下,当用户在编辑文本中输入新值时,它会根据必须创建的按钮对适配器中的新值进行排序。但是,我的问题是当用户在编辑文本视图上输入新文本时,动态创建的按钮不会被删除。它必须看起来像这样:

if (!s.equals("")) 
 final String query = s.toString().trim();
 filteredTags.clear();
 ((ViewManager) btnTag.getParent()).removeView(btnTag);


 for (int i = 0; i < TagArray.size(); i++) 

     final String tagName = TagArray.get(i).gettagName();

     if (tagName.contains(query)) 

         filteredTags.add(TagArray.get(i));

     


 

 count1 = filteredTags.size();

 layout = (LinearLayout) dialog.getCustomView().findViewById(R.id.layoutTags);
 layout.setOrientation(LinearLayout.VERTICAL);  //Can also be done in xml by android:orientation="vertical"
 layout.setWeightSum(1);


 float rowneed = ((float) count1 / 5);
 k = 0;
 for (int i = 0; i < ceil(rowneed); i++) 
     row1 = new LinearLayout(getContext());
     row1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    /* layout.setVisibility(View.VISIBLE);
     row.setVisibility(View.VISIBLE);*/
     for (int j = 0; j < 5; j++) 

         btnTag = new Button(getContext());
         btnTag.setHeight(15);
         btnTag.setWidth(0);
         btnTag.setMinimumWidth(155);
         btnTag.setMinimumHeight(135);
         mTagList1 = new ArrayList<>();


         if (k < count1) 

             btnTag.setText(filteredTags.get(k).gettagName());
             btnTag.setId(k);

             k++;


             btnTag.setVisibility(View.VISIBLE);

          else 
             btnTag.setVisibility(View.INVISIBLE);
         
         Log.e("count", " " + k + " " + count1 + " " + ceil(rowneed) + " " + edtTag.getText().toString());
         btnTag.setTextSize(7);
         btnTag.setGravity(0);


         row1.addView(btnTag);


     

     layout.addView(row1);


 
 for (int btnId = 0; btnId < filteredTags.size(); btnId++) 

     btnTag = (Button) dialog.getCustomView().findViewById(btnId);
     final int finalId1 = btnId;

     btnTag.setOnClickListener(new View.OnClickListener() 
         public void onClick(View view) 
             TagNameArray.add(new Tags(filteredTags.get(finalId1).gettagId(), filteredTags.get(finalId1).gettagName()));
             // Log.e("button","Button clicked index = " + finalId +" "+ TagArray.get(finalId1).gettagName()+" "+TagNameArray.size());
         
     );
 


【问题讨论】:

我想有人已经回答了你的问题***.com/questions/3995215/… 【参考方案1】:

添加这行代码:layout.removeAllViews(); layout.invalidate(); row.removeAllViews(); row.invalidate();

【讨论】:

【参考方案2】:

这可能对你有帮助,给我一个反馈,希望我能帮助你

例如为 btnTag 设置一个动态标签

btnTag.setTag(DynamicTagInt++);

然后

row1.removeView(btnTag.findViewById(DynamicTagInt)); 
  //DynamicTagInt= the desired button that you want to delete

或者通过按钮的 ID 例如

row1.removeView(btnTag.findViewWithTag(k));

【讨论】:

以上是关于如何在 android 中实用地添加和删除布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现在动态布局中添加更多视图在android中实现滚动视图

如何在 Xamarin.Forms for android / ios 中实现特定布局

如何通过正确的视图 z 顺序在 android 中实现这个基本布局

如何在 Flutter 布局中添加或删除组件?

如何在Android View中实现这种布局配置

如何从 Android 的布局中删除 Edittext?