В моем приложении используются вкладки, каждая вкладка - Fragment
(from android.app.Fragment). Я хочу использовать вложенные фрагменты в одном из них.Фрагмент добавлен программным путем
Вот фрагмент верхнего уровня должен содержит вложенный фрагмент:
import android.app.Fragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import fr.epitech.test_esi.R;
public class ReservationCalendarFragment extends Fragment {
public static final int stringId = R.string.calendar_tab;
public static final String tag = "reservation_calendar_frag";
CalendarFragment t = new CalendarFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = ((FragmentActivity) getActivity())
.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.calendarframelayout, t, CalendarFragment.tag);
ft.commit();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.reservation_calendar_layout, null);
}
}
}
Он добавляет программно первый фрагмент, используя FragmentTransaction
. Он действительно работает (я имею в виду, что вложенный фрагмент добавлен, и я вижу его), но каждый раз, когда я переключаюсь на другую вкладку (так отображается другой фрагмент) и возвращаюсь к ней, вложенный фрагмент исчезает.
Вот код CalendarFragment
:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CalendarView;
import android.widget.CalendarView.OnDateChangeListener;
import fr.epitech.test_esi.R;
public class CalendarFragment extends Fragment {
public static final String tag = "calendar_frag";
private SimpleDateFormat _df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragView = inflater.inflate(R.layout.calendar_layout, null);
CalendarView calendarView = (CalendarView) fragView
.findViewById(R.id.calendar);
calendarView.setOnDateChangeListener(new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth) {
Calendar c = Calendar.getInstance();
c.set(year, month, dayOfMonth);
Log.d("DATE", c.getTime().toString());
}
});
return fragView;
}
- вложенной фрагмент
CalendarFragment
расширяетandroid.support.v4.app.Fragment
- Моя деятельность является
FragmentActivity
Я даже попытался пребывания на этом фрагменте, положить в фоновом режиме (с помощью кнопки «домой») и возобновлении его, вложенный фрагмент все еще отображается. Это действительно происходит, когда я переключаюсь между вкладками моего приложения.
Если вы хотите, вложенные фрагменты, которые вы используете 'getChildFragmentmanager () '. 'R.id.calendarframelayout' является идентификатором представления из' R.layout.reservation_calendar_layout' или является идентификатором макета, на котором расположены вкладки? Кроме того, простые вкладки или вкладки, реализованные через «ViewPager»? – Luksprog
@Luksprog Я использую вкладки в ViewPager. Параметр R.id.calendarframelayout является идентификатором рамки, содержащейся в R.layout.reservation_calendar_layout. Кроме того, как я должен использовать 'getChildFragmentManager'? Кажется, я не могу использовать его с Fragment из lib. – nathan
Проверьте этот ответ http://stackoverflow.com/a/13381792/493939 и посмотрите, поможет ли он вам. – Luksprog