2

解決に手伝ってください。getArguments()。getInt()が "1"から "0"に戻るのを開始します。

IはRecyclerFragmentの各々は、動的CardView Sを含有する、ViewPagerActivityと5 RecyclerViewFragment Sを有しています。

public class CustomFragmentPagerAdapter extends FragmentStatePagerAdapter { 

    private Board board; 
    private long boardID; 

    public CustomFragmentPagerAdapter(FragmentManager fm, Board board, long id) { 
     super(fm); 
     this.board = board; 
     this.boardID = id; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return board.getMyLists().get(position).getName(); 
    } 

    //Here I define fragment, int position - is a position of Fragment in ViewPager 
    @Override 
    public Fragment getFragment(int position) { 
     **return RecyclerViewFragment.newInstance(boardID, position);** 
    } 
} 

次のフラグメントののnewInstanceです:ViewPagerアダプタの

コード

public static RecyclerViewFragment newInstance(long id, int listPosition){ 
    Bundle args = new Bundle(); 
    args.putLong(BUNDLE_ID, id); 
    args.putInt(BUNDLE_LIST_POSITION, listPosition); 
    RecyclerViewFragment fragment = new RecyclerViewFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

私はバンドルを経由してフラグメントの位置を保存 - listPosition

その後、私はOnCreateViewでその位置を取得します〜を通じて

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    boardID = this.getArguments().getLong(BUNDLE_ID); 
    listPosition = this.getArguments().getInt(BUNDLE_LIST_POSITION, 0); 
    return inflater.inflate(R.layout.fragment_recyclerview, container, false); 
} 

したがって、getArguments()からint-Positionを取得すると、次のシーケンスが1,2,3,4,0になるという問題があります。しかし、この順序で書いています - 0,1,2,3,4

あなたはそれは問題ではないと思ってもよいでしょうが、領域ORMは逆になります。私は、動的CardViewsについてのDBから情報を取得すると1からgetArguments()そして、そのことは、私はログを追加

は、ArrayIndexOutOfBoundsException

[更新]投げながら、レルムは、0番目のフラグメントから始まります。 newInstanceとOnCreateView

public static RecyclerViewFragment newInstance(long id, int listPosition){ 
    Bundle args = new Bundle(); 
    args.putLong(BUNDLE_ID, id); 
    Log.d(TAG, listPosition + " Before put"); 
    args.putInt(BUNDLE_LIST_POSITION, listPosition); 
    Log.d(TAG, listPosition + " After put"); 
    RecyclerViewFragment fragment = new RecyclerViewFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    tinyDB = new TinyDB(getContext()); 
    boardPosition = tinyDB.getInt("boardPosition"); 
    boardID = this.getArguments().getLong(BUNDLE_ID); 
    listPosition = this.getArguments().getInt(BUNDLE_LIST_POSITION, 0); 
    Log.d(TAG, listPosition + " Get "); 
    return inflater.inflate(R.layout.fragment_recyclerview, container, false); 
} 

し、LogCatでD私は次の取得:

06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 0 Before put 
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 0 After put 
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 1 Before put 
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 1 After put 
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 2 Before put 
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 2 After put 
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 3 Before put 
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 3 After put 
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 4 Before put 
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 4 After put 
06-12 00:37:46.190 25265-25265/com.treggo.flexible D/mLogs: 1 Get 
06-12 00:37:46.266 25265-25265/com.treggo.flexible D/mLogs: 2 Get 
06-12 00:37:46.322 25265-25265/com.treggo.flexible D/mLogs: 3 Get 
06-12 00:37:46.397 25265-25265/com.treggo.flexible D/mLogs: 4 Get 
06-12 00:37:46.452 25265-25265/com.treggo.flexible D/mLogs: 0 Get 

P.S.バイパス例外に、私はこの問題から私はそれがなく、1から始まると仮定し、代わりに私はいませんが、あなたのリスト位置のインデックスを実装する方法レルム

+0

を適切な場所で+/- 1を追加しますか? :D – Vucko

+0

ViewPagerは、現在のFragmentと隣接するFragmentの両方を同時にロードします。最初に0の代わりに1を得る方法がわかりません –

+0

ところで、エラーを投げるlogcatとコードを提供する必要があります。 *デバッグのヘルプを求める質問(「なぜこのコードは動作しないのですか?」)には、目的の動作、特定の問題またはエラー、および質問自体にそれを再現するのに必要な最短コードが含まれていなければなりません。 [mcve] *の作成を参照してください。 –

答えて

0

からそれを読んで、9 CardViewsを設定0

この場合

することは、あなたのnewInstance()方法に次の行を置き換えます。これで

args.putInt(BUNDLE_LIST_POSITION, listPosition); 

args.putInt(BUNDLE_LIST_POSITION, listPosition - 1); 
関連する問題