2016-07-21 9 views
1

スライドメニューで選択項目をクリックした後、MainActivityからフラグメントを削除しようとしています。しかし、私はそれを実装する方法を見つけることができません。アクティビティからFragmentを削除するには?

私はオンラインで見て、クラスを見つけましたが、私は間違った実装をしていると思います。

MainActivity Java;

XMLファイルのmain_content;

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="#692f2f" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/app_bar_main"> 


    <fragment 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/fragment" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="53dp" 
     tools:layout="@layout/frag" /> 
</RelativeLayout> 

答えて

2

私の英語のために申し訳ありません。

実行時にあなたの破片を管理できるようにしたい場合は、ハード、このようなあなたのXMLに空の容器を置く代わりに、あなたのXMLファイルでそれらをコーディングしないでください。

<FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/fragment" 
     /> 

あなたが正常になりたくありませんlayout_widthとlayout_heightの両方にwrap_contentを使用して、配置を簡単にします。また、マージンは断片自体ではなくフラグメントの内容に直接行くことができます。これをmain_activity XMLレイアウトファイルに戻すことができます。 onCreate機能で

private FragmentManager fm; 
private FragmentTransaction ft 

あなたのコード内で次に
@Override 
    public View onCreateView(LayoutInflater inflater, 
      ViewGroup container, Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.your_fragment_layout_here, container, null); 
    } 

、あなたが例えば、FragmentTransactionを使用するFragmentManagerを持っている必要があります。

とは、あなたのフラグメントのクラスでそれを膨らませるがあります。

fm = getFragmentManager(); 

次に:

@Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     ft = fm.beginTransaction(); 

     if (id == R.id.Technology) { 
      ft.remove (fragment_instance_to_remove_here); 
      ft.commit(); 


     } else if (id == R.id.Opinion) { 


     } else if (id == R.id.travel) { 

     } else if (id == R.id.politics) { 

     }else if(id == R.id.Home){ 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
} 

さらに詳しい説明はFragmentManagerです。

希望すると助かります。

+0

ft.removeをintに適用することはできません。 – asdddd

+0

ft.remove()はレイアウトではなくフラグメントのインスタンスを取ります。私の間違いは@Falla Coulibalyの編集です。 – Cochi

+0

@asddddこれまたは任意の回答があなたの質問を解決した場合、チェックマークをクリックして[受諾](http://meta.stackexchange.com/q/5234/179419)を検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 – Sufian

関連する問題