我的應用程序使用選項卡,每個選項卡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
我甚至嘗試對這個片段期間,把後臺的活動(使用home按鈕)並恢復它,嵌套的片段仍然顯示。當我在我的應用程序的選項卡之間切換時真的發生。
當你需要嵌套的片段( )'。 'R.id.calendarframelayout'是來自'R.layout.reservation_calendar_layout'的視圖的ID,還是標籤所在佈局的ID?此外,通過'ViewPager'實現的簡單標籤或標籤? – Luksprog
@Luksprog我在ViewPager中使用選項卡。 R.id.calendarframelayout是R.layout.reservation_calendar_layout中包含的framelayout的ID。另外,我應該如何使用'getChildFragmentManager'?好像我不能使用支持lib中的Fragment。 – nathan
檢查我的這個答案http://stackoverflow.com/a/13381792/493939,看看它是否可以幫助你。 – Luksprog