【发布时间】:2013-07-10 15:00:43
【问题描述】:
我的应用程序使用标签,每个标签都是Fragment(来自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的视图的 id 还是选项卡所在的布局的 id?此外,通过ViewPager? 实现的简单选项卡或选项卡 -
@Luksprog 我在 ViewPager 中使用标签。 R.id.calendarframelayout 是 R.layout.reservation_calendar_layout 中包含的框架布局的 id。另外,我应该如何使用
getChildFragmentManager?看来我不能将它与支持库中的 Fragment 一起使用。 -
检查我的这个答案stackoverflow.com/a/13381792/493939,看看它是否对你有帮助。
-
@Luksprog atm 我希望能够使用 getChildFragmentManager :) 我正在努力。
标签: android android-fragments fragment