Мне нужна помощь, так как я немного новичок в Android, в моем приложении для Android, над которым я работаю, я все время перемещаюсь между фрагментами. Я использую код для перехода между фрагментами.
private void displaySelectedScreen(int id){
Fragment fragment=null;
String fragment_tag = "";
switch(id)
{
case R.id.nav_listen:
fragment=new ListenFragment();
fragment_tag = "LISTENTAG";
break;
case R.id.nav_programs:
break;
case R.id.nav_stories:
break;
case R.id.nav_about:
break;
case R.id.nav_feedback:
break;
case R.id.nav_share:
shareTextUrl();
break;
}
if (fragment!=null){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame,fragment,fragment_tag);
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
Мне просто нужно проверить, что если фрагмент существует (загружен) раньше, контейнер должен отображать ранее загруженный фрагмент. Однако, если Фрагмент не был загружен до того, как Фрагмент должен быть загружен в первый раз.
Может ли кто-нибудь помочь мне в этом?
Спасибо большое. Код внутри моего фрагмента: (ListenFragment.java)
public class ListenFragment extends Fragment
{
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Listen Live");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View InputFragmentView=inflater.inflate(R.layout.listen_layout,container,false);
return InputFragmentView;
}
Было бы здорово, если бы вы могли показать мне образец, пожалуйста, так как я немного новичок в Android.
Я просто хочу, чтобы ListenFragment не создавался каждый раз, когда я возвращаюсь к этому фрагменту.
Вам не нужно объявлять переменные, ссылающиеся на экземпляр фрагмента. Вместо этого сохраните фрагмент по тегу и получите его. Как это:
Fragment fragment = getSupportFragmentManager().findFragmentByTag("fragment_tag");
if (fragment == null) {
fragment=new ListenFragment();
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment, fragment_tag);
ft.commit();
Я постараюсь сообщить вам.
Спасибо большое, это сработало !. Вы сэкономите мне много времени.
используйте следующие методы, чтобы получить фрагмент:
getFragmentManager().findFragmentById(R.is.xyz)
getFragmentManager().findFragmentByTAG("XYZ")
затем используйте для запуска фрагмента:
supportFragmentManager.beginTransaction()
здесь есть аналогичный вопрос, это может помочь: Проверьте, существует ли фрагмент, и используйте его повторно.
В
ListenFragmentусловие проверки может быть, еслиview != null, то ... Это то, о чем вы спрашиваете?