これはStackOverflowに関する私の最初の投稿です。このサイトはこれまでのところ命の恩人です。
私はこれにかなり慣れており、これまでのところ問題を解決することができましたが、この問題はここで解決できません。
私はフラグメント(私はこれが初めてです)の内部で作業しています。私はこのフラグメント内の既存のコンテナーを(ビューについてはあまり知りませんが)インフレさせようとしています。私はこれを正しく説明しているといいのですが。
コンテキスト:壁の面積や長さなどを計算するために、ユーザーからいくつかの測定値(およびその他の変数)を取得しようとしています。ユーザーは、ボタンをクリックして「壁を追加」できます。これは既存のレイアウトから膨張するだけです。
異なるライフサイクル(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;
}
}
これがインフレが発生する場所です:(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:指定された子にはすでに親があります。最初に、子の親でremoveView()を呼び出す必要があります。
もちろん、そのビューは削除したくありませんが、追加し続けたいと思います。傷の頭
すべてをフラグメントに変更し始める前に、これを機能させていました。つまり、私は今、フラグメントの中にいるという事実に関係しているのではないでしょうか。
私はこれを理解するために一日中過ごしました。私はFragmentsで作業を始めたばかりか、それがに対する理解の欠如であるので、私のロジックに欠陥があるかどうかはわかりませんLayoutInflator
。おそらく両方です。O :-)
onClick内で、ビューを膨らませてください
public void onClick(View v) {
inflater.inflate(R.layout.wall_add_section, wallContainer, true);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加