2

Bitte helfen Sie mir bei der Lösung?getArguments(). GetInt() beginnt von "1" zurückzukehren, stattdessen "0"

Ich habe eine Activity mit ViewPager und 5 RecyclerViewFragment s, jeweils RecyclerFragment dynamischen CardView s enthält.

-Code für ViewPager Adapter:

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);** 
    } 
} 

Weiter ist newInstance von Fragmente:

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; 
} 

Ich speichere Fragment Position über Bundle - listPosition

Dann bekomme ich diese Position in OnCreateView durch

Also das Problem ist, dass, wenn ich int-Position von getArguments() erhalten, hat es nächste Sequenz - 1,2,3,4,0. Aber es schreibt in dieser Reihenfolge - 0,1,2,3,4

Vielleicht denken Sie, dass es egal ist, aber Realm ORM kehrt um. Wenn ich eine Info von DB über dynamische CardViews bekommen, beginnt Realm von der 0. Fragment, während getArguments() von 1. Und das Ding

ArrayIndexOutOfBoundsException

[Update] wirft I Log hinzugefügt. d newInstance und 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); 
} 

und in LogCat ich weiter:

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. In der Bypass Ausnahme, habe ich 9 CardViews, statt es von Realm

+0

hinzufügen +/- 1 an der entsprechenden Stelle? : D – Vucko

+0

Der ViewPager lädt gleichzeitig das aktuelle Fragment und die benachbarten Fragmente. Ich sehe nicht, wie Sie 1 anstelle von 0 zuerst erhalten könnten –

+0

Übrigens sollten Sie das Logcat und den Code, der den Fehler auslöst, bereitstellen. * Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der notwendig ist, um es in der Frage selbst zu reproduzieren. Siehe Erstellen eines [mcve] *. –

Antwort

0

Lese Obwohl ich nicht tun, wie Sie die Indizierung Ihrer Liste Positionen umgesetzt, von dem Problem gehe ich davon aus 1 beginnt, anstatt 0.

Wenn dies der Fall ist, in Ihrem newInstance() Verfahren ersetzt die folgende Zeile:

args.putInt(BUNDLE_LIST_POSITION, listPosition); 

mit diesem:

args.putInt(BUNDLE_LIST_POSITION, listPosition - 1);