フラグメントトランザクションの実行アプリケーションが開くと同時にアプリケーションを停止します。

トランザクションで.commit()を削除した場合、アプリはコンパイルされますが空の画面が表示されます。 .commit()を追加すると、アプリは即座に開閉します。私はフラグメントに慣れていないので誰でもこれを解決することができます。 ImageViewのレイアウトを追加しました。それをFragmentクラスに追加し、その中に画像をハードコーディングしました。さらに、そのフラグメントのインスタンスをMainActivityで作成しました。

Android Studioのバージョンは3.1.3です。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>






body_part_fragment.xml

<?xml version="1.0" encoding="utf-8"?>



BodyPartFragment.java

 package com.example.musa.my_frag_app;

 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;

public class BodyPartFragment extends Fragment {

public BodyPartFragment(){
    //Do Nothing
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View rootView = inflater.inflate(R.layout.body_part_fragment, container);
    ImageView body_image = rootView.findViewById(R.id.body_part_frag);
    body_image.setImageResource(R.drawable.ic_launcher_background);

  return rootView;
}

}

MainActivity.java

  package com.example.musa.my_frag_app;

  import android.support.v4.app.FragmentManager;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;

  public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    BodyPartFragment headfrag = new BodyPartFragment();
    FragmentManager frag_m = getSupportFragmentManager();
    frag_m.beginTransaction().add(R.id.head_container,headfrag).commit();
    //frag_m.executePendingTransactions();
}
}
0
@MaazBinMusa inflater.inflate(R.layout.body_part_fragment、container); は間違いなく例外を投げます。 LayoutInflator.inflate()のデフォルトは attachToRoot = true です。 Fragment 内の onCreateView から呼び出されたときは、 false になります。 inflater.inflate(R.layout.body_part_fragment、container、false); に変更します。
追加された 著者 veritas1,
いや。同じ結果です。
追加された 著者 Maaz Bin Musa,
@AmineNokraエラーはありません。閉まります。アプリケーションはクラッシュしません。それだけで活動を閉じます。
追加された 著者 Maaz Bin Musa,
この画像が表示されるべきではない理由はありません
追加された 著者 Maaz Bin Musa,
@VinayRathod私はテキストで以下の解決策を試しました。それはまた働かない
追加された 著者 Maaz Bin Musa,
これはうまくいきました@ veritas1
追加された 著者 Maaz Bin Musa,
replace()を試してください。
追加された 著者 Shubham Vala,
エラーログを貼り付けられますか?
追加された 著者 Amine Nokra,

5 答え

inflater.inflate(R.layout.body_part_fragment, container); will definitely throw an exception. The default for LayoutInflator.inflate() is attachToRoot=true. It should be false when called from onCreateView in a Fragment as this handles that for you. Change to inflater.inflate(R.layout.body_part_fragment, container, false);

5
追加された

add param for attachToRoot false

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View rootView = inflater.inflate(R.layout.body_part_fragment, container, false);
    TextView body_text = rootView.findViewById(R.id.body_part_frag);
    body_text.setText("Hello World");
    return rootView;
}
2
追加された
それでも同じことをします。アプリケーションを閉じます
追加された 著者 Maaz Bin Musa,

これをフラグメント本体部分として試してください。



        

0
追加された
これはどのように機能しますか。 Activityメインにコンテナが必要です。
追加された 著者 Maaz Bin Musa,
このレイアウトは MainActivity 用ではなく、 body_part_fragment.xml 用です。
追加された 著者 Shubham Vala,

変化する

rootView = inflater.inflate(R.layout.body_part_fragment、container);を表示します。

rootView = inflater.inflate(R.layout.body_part_fragment、null);を表示します。

0
追加された

このようにしてみてください。

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
BodyPartFragment headfrag = new BodyPartFragment();
    fragmentTransaction.replace(R.id.head_container, headfrag);
    fragmentTransaction.commit();
0
追加された