0

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를 사용하는 방법이 있습니까? 유일한 방법은 조각을 서로 교체하는 것이 사실입니까?

답변

2

ActionBarActivity에서 조각을 다른 조각으로 바꾸지 않고 제거 할 수 있습니까?

예, FragmentTransaction#remove(Fragment)

근본적인 문제는 그러나 당신이 transaction.add(R.id.content_frame, prefs);으로 PreferenceFragment을 보여주고 있다는 점이다 사용할 수 있습니다. PreferenceFragment 만 ListView 뒤에 표시하려면, 대신 replace()을 사용해야합니다.

+0

죄송합니다. replace() 및 remove()를 테스트했지만 성공하지 못했습니다. 나는 무엇이 잘못되었는지를 모른다! – user3569123

+0

"prefs"를 정적 필드로 저장 한 다음이 방법으로 제거했습니다. transaction.remove (prefs); transaction.commit(); 맞습니까? – user3569123

+0

예, FragmentManager에서 해당 Fragment를 제거하는 한 가지 방법입니다. –

관련 문제