如何通过在 Fragment 中单击按钮多次膨胀 view/container?

How do I inflate a view/container multiple times by button click inside a Fragment?

这是我在 Whosebug 上的第一个 post。到目前为止,该站点一直是救星。

我对此很陌生,到目前为止,我已经能够解决我的问题,但我被困在这个问题上了。

我正在片段中工作(我是新手)。我正在尝试膨胀(我对此不太了解)这个片段中的现有容器,并带有一个视图。我希望我能正确解释这一点。

上下文:我正在尝试从用户那里获取一些测量值(和其他变量)来计算墙面积、长度等。用户应该能够通过单击按钮 "Add Walls";它应该只是从现有布局中膨胀。

我试过在不同的生命周期中移动代码(onCreate vs onCreatedView 等)。我还尝试在 LayoutInflator 中传递不同的参数(父视图,将 attachToRoot 设置为 false、true 等)

CalculatorActivity.java

    public class CalculatorActivity extends AppCompatActivity {

      //...

      private FragmentNewCalc fragmentNewCalc;    

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calculator);
        fragmentNewCalc = new FragmentNewCalc();
        //Replace Containers
        getSupportFragmentManager().beginTransaction()
          .replace(R.id.container_wrap, fragmentNewCalc)
          .commit();
    }
}

这会膨胀 XML ->

<FrameLayout
    android:id="@+id/container_wrap"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

FragmentNewCalc.java


      LinearLayout wallContainer;
      LinearLayout test; //testing with LinearLayout
      CardView newWallCard; //this is what I want to use though


      @Nullable
      @Override
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag_new_calc, container, false);

        wallContainer = (LinearLayout) v.findViewById(R.id.new_wall_container);
         //LayoutInflater inflater2; //testing
        //inflater2 = getLayoutInflater();
        //newWallCard = (CardView) inflater.inflate(R.layout.frag_new_walls, container, false);
        test = (LinearLayout) inflater.inflate(R.layout.wall_add_section, null); //tested this wallContainer as parent view and true/false   

        fab_add_wall = (FloatingActionButton) v.findViewById(R.id.fab_add_wall);


        fab_add_wall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wallContainer.addView(test);


            }
        });


        return v;
    }
}

这是 inflation 应该出现的地方:(具有 CoordinatorLayout、Scrollview 等的更大布局的一部分)

    <LinearLayout
        android:id="@+id/new_wall_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

我第一次点击按钮时,用户界面成功添加了膨胀布局(按预期工作),但连续点击后,出现错误:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

我当然不想删除该视图,但想继续添加它。 挠头

在开始将所有内容更改为 Fragments 之前,我已经完成了这项工作。所以这告诉我,这可能与我现在在片段中的事实有关。

我花了一整天的时间试图解决这个问题。我不确定我的逻辑是否有缺陷,因为我刚开始使用 Fragments 还是我对 LayoutInflator 缺乏理解。可能两者都有。 O:-)

在您的 onClick 中,请膨胀视图

public void onClick(View v) { 

    inflater.inflate(R.layout.wall_add_section, wallContainer, true);
}