NavigationDrawer에 ActionBarActivity를 사용하고 Drawer의 내용 프레임에 ListView를 사용합니다. 조각을 다른 조각으로 바꾸지 않고 제거 할 수 있습니까?
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/lyt_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="horizontal" >
<ListView
android:id="@+id/list_notes"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1" >
</ListView>
</LinearLayout>
</FrameLayout>
<FrameLayout
android:id="@+id/drawer_frame"
android:layout_width="240dp"
android:layout_height="fill_parent"
android:layout_gravity="start"
android:layout_weight="1" >
<ListView
android:id="@+id/left_drawer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/darkGray"
android:choiceMode="singleChoice"/>
</FrameLayout>
는이 같은 서랍 항목 중 하나에서 PreferenceFragment를 엽니 다
FragmentTransaction transaction = getFragmentManager().beginTransaction();
PrefsFragment prefs = new PrefsFragment();
transaction.add(R.id.content_frame, prefs);
transaction.addToBackStack(null);
transaction.commit();
이 내 PrefsFragment입니다 :
public class PrefsFragment extends Fragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().getFragmentManager().beginTransaction()
.replace(R.id.content_frame, new PrefsFr())
.commit();
}
public class PrefsFr extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
... }
}
}
,
하지만이 조각을 제거 할 수 없습니다. 다른 서랍 항목으로 토글 할 때; PreferenceFragment는 tranceparent 배경을 가진 content_frame의 ListView 위에 남아 있습니다.
ActionBarActivity에서 다른 프래그먼트로 대체하지 않고 프래그먼트를 제거 할 수 있습니까? api> 11에 대해 PreferenceFragment를 사용하는 방법이 있습니까? 유일한 방법은 조각을 서로 교체하는 것이 사실입니까?
죄송합니다. replace() 및 remove()를 테스트했지만 성공하지 못했습니다. 나는 무엇이 잘못되었는지를 모른다! – user3569123
"prefs"를 정적 필드로 저장 한 다음이 방법으로 제거했습니다. transaction.remove (prefs); transaction.commit(); 맞습니까? – user3569123
예, FragmentManager에서 해당 Fragment를 제거하는 한 가지 방법입니다. –