2

更新2:すべてのv4サポート参照を取り除くことで解決しました。 更新:何がこの動作を引き起こすかを見るために、最初から始めました。私は場所のアクセス許可のチェックを追加すると発生します。私は後方に行くことはできません - 間違っているFragmentStatePagerAdapgerを使用しているすべてのパーミッションコードを取り除いても。FragmentStatePagerAdapter getItemへの最初の呼び出しがsdkで間違っている22 - > 23アップグレード

私は、appcompat-v7:23.2.1を使用して、compileSdkVersionとtarget SdkVersionを22から23に変更するまで、動的に作成されたフラグメントのViewPagerで正常に機能していたFragementStatePagerAdapterを持っています。今、私がA、B、Cをロードしようとすると、B、B、Cが読み込まれます。しかし、次にスワイプすれば、C、B、Aが得られます。それはうまくいかない。ここで

は、私は私のアダプターとviewpagerを設定する方法である:

myAdapter = new MyAdapter(getSupportFragmentManager(), numItems); 
viewPager = (ViewPager) findViewById(R.id.pager); 
viewPager.setAdapter(myAdapter); 
viewPager.setCurrentItem(position); 

MyAdapter:

private class MyAdapter extends FragmentStatePagerAdapter { 
    private final int size; 

    public MyAdapter(FragmentManager fm, int _size) { 
     super(fm); 
     size = _size; 
    } 

    @Override 
    public int getCount() { 
     return size; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     String _id = myArray[position]; 
     return MyFragment.newInstance(_id); 
    } 
} 

とフラグメントをインスタンス化:

public static MyFragment newInstance(String _id) { 
     final MyFragment f = new MyFragment(); 
     final Bundle args = new Bundle(); 
     args.putString("_id", _id); 
     f.setArguments(args); 
     return f; 
    } 

...

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     _id = getArguments().getString("_id");    
    } 

アップグレード後に誰かがこれを経験しましたか?私は何時間もこの車輪を回転させた後に全力を失っている。 FragmentStatePagerAdapter由来のアダプタで、FragmentManager代わりのSupportFragmentManagerを使用しよう:コメントは、問題を解決して、私が投稿

+1

私のプロジェクトでsimularコードを素早くチェックした後のちょっとしたアイデア。 SupportFragmentManagerが必要ですか?私はストレートFragmentManagerを使用し、最近のappcompatとSDK 23のためにうまく動作します... –

+0

それを固定した聖なる牛。はい!!答えとしてこれを入れ、私はそれを受け入れます。 –

答えて

2

アイデアは、ここに

ショートバージョン...いくつかの詳細と同じ答えです。 あなたが100%確かでなければ、SupportFragmentManagerが必要です。

説明:

コードの問題ではかなりよさそうです。 adapterがフラグメントを混乱させる唯一の場所は、方法instantiateItem(ViewGroup container, int position)です。このメソッドは、コンストラクタの引数として渡されたFragmentManagerを使用します。だから我々は疑わしいことを非難することができるSupportFragmentManager

+0

フォローアップのために、私はv13サポートライブラリを使いたくなかったので、これらのファイルを自分のプロジェクトにコピーしなければなりませんでした(あなたのsdkフォルダ - >ソース - > android-23 - >アンドロイド - >サポート - > v13 - > app):FragmentCompat、FragmentCompat23、FragmentCompatICS、FragmentCompatCSMR1、FragmentStatePagerAdapter。 –

+0

私はAPI 16+をターゲットにしています。そのため、FragmentStatePagerAdapterだけをマイナーなカスタム調整でコピーしてしまいました。残りの部分はネイティブフラグメント(フィンガーを横切る)で正常に動作します。 –

+0

@silver_man 'android.app.Fragment'を使用している場合はFragmentManagerを使用し、' android.support.v4.app.Fragment'を使用している場合はSupportFragmentManagerを使用することをお勧めします。両方ともサポートライブラリと共に使用することができます。つまり、AppCompatActivityにいずれかのタイプのフラグメントを置くことができます。また、FragmentPagerAdapterまたはFragmentStatePagerAdapterで 'android.app.Fragment'ネイティブフラグメントを使用する場合は、v13サポートライブラリのバージョン、つまり' android.support.v13.app.FragmentStatePagerAdapter'を使用する必要があります。 –

0

あなたがandroid.app.Fragmentを使用している場合はFragmentManagerを使用して、あなたがそのような単純なandroid.support.v4.app.Fragmentを、使用している場合SupportFragmentManagerを使用する必要があり、DmitryOからthe answerに追加します。

どちらもサポートライブラリと一緒に使用できます。つまり、AppCompatActivityにいずれかのタイプのフラグメントを置くことができます。 FragmentPagerAdapterまたはFragmentStatePagerAdapterでandroid.app.Fragmentネイティブフラグメントを使用する場合は、アダプタのv13サポートライブラリバージョン(android.support.v13.app.FragmentStatePagerAdapter)を使用する必要があります。

これはもともとはコメントとして投稿されていましたが、この情報が失われることは望ましくありませんでした。

関連する問題