1

似たような質問がたくさんありました。多くの回答がありましたが、どれも私を助けませんでした。可能であれば明確な答えを得るために明確な質問を投稿しようとします。ViewPagerのフラグメントを新しいものに置き換える方法

私は、(現在は)1つのフラグメント(HomeScreenFragment)しか含まれていないFragmentStatePagerAdapterを持つViewPagerを持つアクティビティを持っています。

Inside HomeScreenFragment私はRecyclerViewを持っています。いくつかの種類のアイコンのリストを持っています。これは、アイテムクリックごとに異なるフラグメントを開くべきです。

HomeScreenFragmentには、名前が "container"のルートレイアウトとしてFrameLayoutがあります。これは私がこのケースでMainTypesFragmentでHomeScreenFragmentを置き換えるために呼んでいる方法である:

private void openAllTypesFragment() { 
    MainTypesFragment fragment = new MainTypesFragment(); 
    FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.container, fragment); 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    transaction.addToBackStack(HomeScreenFragment.class.getName()); 
    transaction.commit(); 
    eventBus.post(new Event(null, Event.EVENT_FRAGMENT)); 
} 

FragmentStatePagerAdapterがMainActivityで初期化されているので、私はどのMainActivityキャッチし、()adapter.notifyDataSetChangedを呼び出してイベントを送信しています。

はそれをこの方法を行う、何も起こりません。私は(getChildFragmentManagerと試み)の代わりgetActivityの()。getSupportFragmentManager()その場合、前断片(HomeScreenFragment)は新しいもの(MainTypesFragment)の下に表示されている..

ここで何が間違っているのですか?

+0

あなたは以前のフラグメントを置き換えたいのですか、それとも古いフラグメントを開くだけですか? –

+0

RecyclerViewアイテムのタイプと、ビューページ内に2番目のフラグメントとして常に存在する1つのフラグメントのタイプに応じて、いくつかの異なるフラグメントに置き換えることができるviewpager(HomeScreenFragment)内に2つのフラグメントを入れたい – user8789149

+0

各ページのフラグメントスタック?ページ1のリストアイテム1をクリックすると、ページ1のリストの上に新しいフラグメントが表示されますか? –

答えて

0

使用しているコンテナが間違っています.1つのコンテナをアクティビティxmlに保持し、そのコンテナを使用してすべてのフラグメントをロードします。

transaction.replace(R.id.container, fragment); 

コンテナは、ビューページと他のビューが存在する必要があるアクティビティコンテナです。

+0

ケース全体のビューページを新しいフラグメントに置き換えるでしょうか?私はviewpagerの中に2つのフラグメントを持っていて、その中でクリックされたアイテムのタイプに基づいて最初のものだけを置き換えることができます...例えば、アプリケーションの実行中にViewPager内にHomeScreenFragmentとSecondFragmentを持っています。 HomeScreenFragment内のアイテムの1つをクリックした後、MainTypesFragmentで置き換える必要がありますが、SecondFragmentは変更しないでください。 – user8789149

+0

次に、HomeScreenFragmentビューに一致するxml内のその領域のframeLayoutを保持しなければなりません。そして、置換します。コードを追加すると、はっきりと言うことができます。 – Anonymous

+0

あなたが提案した方法が、実際にはより良い解決策になります。だから私はviewPagerをFrameLayoutの中にfragment_containerというIDで持っています。私がreplaceメソッドを呼び出すと、そのIDを最初のパラメータとして置いても、それをうまく置き換えることはできません。私は新しいFragmentを見ることができますが、前のメインのものはViewPagerのものの下でまだ表示されています。 .. – user8789149

0

あなたは私のコードを試すことができます:viewpagerのフラグメントで

private void addFilmDetailFragment(Movie movie){ 
     android.support.v4.app.FragmentManager fragmentManager = getFragmentManager(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     FilmDetailFragment fragment = new FilmDetailFragment(); 

     Bundle bundle = new Bundle(); 
     bundle.putParcelable("movie", movie); // Key, value 
     fragment.setArguments(bundle); 

     fragmentTransaction.replace(R.id.mainContentStore, fragment); 
//  fragmentTransaction.replace(R.id.mainContent, fragment, Config.TAG_FILM_DETAIL); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 

を:それは私のために働い

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainContentStore" 
    android:layout_width="match_parent" 
    android:layout_gravity="center" 

    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerFilm" 
     android:layout_gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


</FrameLayout> 

が、私はそれはあなたの問題を助けることを願っています!

+0

使用している構造とIDについていくつかの情報を提供していただけますか?現在のルートレイアウトの "mainContentStore" idかフレームレイアウトビューページャーは内部にありますか? – user8789149

+0

置き換えようとしているフラグメントは、ViewPagerの中にはありませんよね?通常のフラグメントを新しいフラグメントに置き換えるだけですか? – user8789149

0

ViewPagerの内部アクティビティと、ページ内に新しいフラグメントを開くための内部フラグメント(ページ)、コンテナが必要です。

そして、あなたは、あなたがすべき新しいフラグメントを開きたい場合は、ページフラグメントでこの ようなユーザ何か

getChildFragmentManager().beginTransaction() 
     .replace(R.id.page_fragment_container, fragment) 
     .addToBackStack(name) 
     .commit() 

どこページフラグメント内のR.id.page_fragment_containerコンテナ。

+0

これは動作しますが、HomeScreenFragment(ViewPagerのもの)は新しいものの下に表示されたままです... – user8789149

+0

新しいフラグメントの背景とルートレイアウトのためのアンドロイド:clickable = "true" 'を追加します。前の断片に戻るチャンスが必要な場合。 –

関連する問題