解決に手伝ってください。getArguments()。getInt()が "1"から "0"に戻るのを開始します。
IはRecyclerFragment
の各々は、動的CardView
Sを含有する、ViewPager
とActivity
と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から始まると仮定し、代わりに私はいませんが、あなたのリスト位置のインデックスを実装する方法レルム
を適切な場所で+/- 1を追加しますか? :D – Vucko
ViewPagerは、現在のFragmentと隣接するFragmentの両方を同時にロードします。最初に0の代わりに1を得る方法がわかりません –
ところで、エラーを投げるlogcatとコードを提供する必要があります。 *デバッグのヘルプを求める質問(「なぜこのコードは動作しないのですか?」)には、目的の動作、特定の問題またはエラー、および質問自体にそれを再現するのに必要な最短コードが含まれていなければなりません。 [mcve] *の作成を参照してください。 –