Запуск транзакції фрагмента Припиняє роботу програми, як тільки вона відкривається

Якщо я видаляю .commit() у транзакції, програма компілює, але показує порожній екран. Якщо я додаю .commit (), програма відкриється і закривається миттєво. Я новачок до фрагментів, хто може допомогти вирішити це. Я просто додав макет ImageView. Набрали його в класі Фрагмент і жорстко закодували зображення в ньому. Далі я просто створив екземпляр цього фрагмента в 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 . Вона повинна бути false при виклику з onCreateView у Fragment , оскільки це виконує для вас. Змініть на inflater.inflate (R.layout.body_part_fragment, container, false);
додано Автор veritas1, джерело
Ні. Те ж результат.
додано Автор Maaz Bin Musa, джерело
@AmineNokra немає помилки. Він просто закривається. Програма не припиняє роботу. вона просто закриває діяльність.
додано Автор Maaz Bin Musa, джерело
@VinayRathod Немає жодної причини, чому це зображення не повинно бути показано
додано Автор 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, контейнер);

до

Переглянути 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
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.