如何在android studio中动态添加/删除线性布局

时间:2017-01-09 21:07:16

标签: android android-layout android-studio

所以我目前有一个Android应用程序,只需按一下按钮即可添加和删除一行线性布局。线性布局包含两个edittexts和两个textview,但该行添加在列表的末尾,我想知道是否有一种方法可以添加/删除依赖于所选edittext的线性布局的一行。

例如:我有4行线性布局,第二行有一个edittext,我按下添加按钮,然后在第2行和第3行之间插入一行。 以下是我的代码

 ToggleButton timeTempToggle;
ArrayList<EditText> dataET = new ArrayList<>();

Button buttonAddStep,buttonRemoveStep;

int id=1; //the id number which indicates the number of commands that will be used


LinearLayout mainLayout; //orientation is vertical

  @Override
protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_parameters);
    buttonAddStep = (Button) findViewById(R.id.buttonAddStep);
    buttonRemoveStep = (Button) findViewById(R.id.buttonRemoveStep);
    mainLayout = (LinearLayout) findViewById(R.id.mainlayout);




  buttonAddStep.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          if(id<8) {
              //adds a stage to be included (limit is 8)
              id++;
              mainLayout.addView(linearlayout(id,"","0"));
              //append after all lines
          }

      }
  });

 buttonRemoveStep.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          if(id>1){ // removes a step from the list of steps
              //removes the stage from the thermal cycling procedure
              //will not remove the first step
              id--;
              mainLayout.removeViewAt(id);
              dataET.remove(dataET.size()-1);
              dataET.remove(dataET.size()-1);
              //remove the  last value and line
          }
      }
  });
 }
 private LinearLayout linearlayout(int _intID, String et1, String et2)
{
    LinearLayout LLMain=new LinearLayout(this);
    LLMain.setId(_intID);
        LLMain.addView(textView(_intID, String.valueOf(_intID) + " Temp (C): "));
        LLMain.addView(editText(_intID, et1));
        LLMain.addView(textView(_intID + 1, "Time(s): "));
        LLMain.addView(editText(_intID + 1, et2));


    LLMain.setOrientation(LinearLayout.HORIZONTAL);
    return LLMain;
}

private EditText editText(int _intID,String preset) {
    EditText editText = new EditText(this);
    editText.setId(_intID);
    editText.setInputType(InputType.TYPE_CLASS_NUMBER);
    editText.setWidth(130);
    editText.setText(preset);
    dataET.add(editText);
    return editText;
}


private TextView textView(int _intID,String Type)
{
    TextView txtviewAll=new TextView(this);
    txtviewAll.setId(_intID);
    txtviewAll.setText(Type);
    txtviewAll.setTypeface(Typeface.DEFAULT_BOLD);
    return txtviewAll;
}

2 个答案:

答案 0 :(得分:0)

也许您可以构造一个ArrayList并首先修改它。这样你就可以管理列表中的事物序列。按照您喜欢的顺序排列ArrayList后,将其添加到for-each循环中,直到您想要的位置。

EDIT。 1)这意味着您必须重新创建视图。 2)由于最大数量是8,因此不是那么糟糕。如果数字是N,我不推荐这个简单的解决方案。

答案 1 :(得分:0)

使用Visibility使用void setVisibility (int visibility)视图:

更多here

enter image description here