Ich habe einen Blick auf die Mehrheit der Antworten hier und kann nicht finden, was für mich funktioniert.FragmentPagerAdapter getItem() zeigt Position 1 statt 0 an
Ich habe ein Fragment namens ActiveThreads Ich möchte, dass, wann immer der Benutzer auf ein Element auf dieser Seite klickt lädt eine PagerActivity, die eine FragmentPagerActivity verwendet, wo der Benutzer blättern kann.
Das Problem, das ich habe, ist, dass, wenn ich auf ein Element klicke, es stattdessen das nächste Element zeigt. Ich habe es mit Debug durchlaufen und es ruft die aktuelle Position und dann die nächste Position auf. Aber es zeigt die nächste Position zuerst und nicht die erste? Irgendeine Idee, was ich falsch mache?
-Code für PostPager Aktivität der getItem Methode
private void populateUIWithData() {
FragmentManager fragmentManager = getSupportFragmentManager();
mViewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) {
@Override
public Fragment getItem(int position) {
if (mThreadItems != null){
mThreads = mThreadItems.get(position);
mFragment = PostFragment.newInstance(mThreads.getId(), mThreads.getTopic_name(),
mThreads.getName(), mThreads.getNum_posts());
mViewPager.getCurrentItem();
}
return mFragment;
}
@Override
public int getCount() {
return mThreadItems.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
if (object != null) {
return ((Fragment) object).getView() == view;
} else {
return false;
}
}
});
}
und hier in PostFragment
public static PostFragment newInstance(String threadID, String topicName, String threadName, String postCount) {
mThreadID = threadID;
mTopicName = topicName;
mThreadName = threadName;
mPostCount = postCount;
Bundle args = new Bundle();
args.putSerializable("threadID", threadID);
args.putSerializable("topicName", topicName);
args.putSerializable("threadName", threadName);
args.putSerializable("postCount", postCount);
mCurrentFragment = new PostFragment();
mCurrentFragment.setArguments(args);
return mCurrentFragment;
}
EDIT hier meine neue Instanz ist der Code für aktive Threads, wenn ich auf einem Element drücken
private void initUI() {
mRecyclerView = (RecyclerView) mRootView.findViewById(R.id.threadRecyclerView);
mLayoutManager = new GridLayoutManager(getActivity(), 1);
mRecyclerView.setLayoutManager(mLayoutManager);
mSwipeRefreshLayout = (SwipeRefreshLayout) mRootView.findViewById(R.id.swipeForNewThreads);
mSwipeRefreshLayout.setColorSchemeResources(R.color.blue, R.color.green, R.color.yellow, R.color.red);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadNewData();
}
});
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener
(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
showItemSelectedAtPosition(position);
}
}));
loadData();
}
private void loadNewData() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loadData();
mAdapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
}
}, 0);
}
private void loadData() {
mDataFactory = new ThreadFeedDataFactory(getActivity());
mDataFactory.getActiveThreadFeed(new ThreadFeedDataFactory.ThreadFeedDataFactoryCallback() {
@Override
public void onThreadDataReceived(ThreadResponse response) {
mData = response;
populateUIWithData();
}
@Override
public void onThreadDataFailed(Exception exception) {
}
});
}
private void populateUIWithData() {
mAdapter = new ThreadAdapter(getActivity(), mData);
mRecyclerView.setAdapter(mAdapter);
}
private void showItemSelectedAtPosition(int position) {
Threads selectedThread = mData.getItem(position);
Intent intent = new Intent(getActivity(), PostPagerActivity.class);
intent.putExtra("Threads", Parcels.wrap(selectedThread.getThreadItem()));
startActivity(intent);
}
Schauen Sie sich die ShowSelec an tedItemOnPosition-Methode, hier lade ich die PostPagerActivity OnClick. Irgendwelche Ideen?
EDIT Aus meiner log Katze
05-03 10:47:54.857 7894-7894/com.mumsnet.android E/threadItemID: 2628772
05-03 10:47:54.865 7894-7894/com.mumsnet.android E/POSTFRAG: threadItemID: 2628772
05-03 10:47:54.867 7894-7894/com.mumsnet.android E/threadItemID: 2628697
05-03 10:47:54.867 7894-7894/com.mumsnet.android E/POSTFRAG: threadItemID: 2628697
05-03 10:47:54.916 7894-7894/com.mumsnet.android E/LoadData: threadItemID: 2628697
05-03 10:47:54.925 7894-7894/com.mumsnet.android E/LoadData: threadItemID: 2628697
können Sie die ID Änderungen sehen? Es zeigt die mit der zweiten ID verbundenen Elemente an! :(
Vielen Dank im Voraus
Hallo, geben Sie bitte den Code für 'ActiveThreads' - denn dies ist, wo Sie sagen, dass Sie anrufen. die 'pagerActivity' - wir können den Code untersuchen, um herauszufinden, warum er sich so verhält, wie Sie es nennen. – ishmaelMakitla
@ishmaelMakitla done – BilalMH
Fügen Sie die Log-Anweisung in der' showItemSelectedAtPosition (int position) 'hinzu, um den Wert von' position' anzuzeigen. Bestätigen Sie, ob dies so ist, wie Sie es erwarten - zum Beispiel, wenn Sie das Element an der ersten Position auswählen, das den Wert von "1" für "Position" zeigt? Dies könnte Licht ins Dunkel bringen. – ishmaelMakitla