Я рассмотрел большинство ответов здесь и не могу найти что-то, что работает для меня.FragmentPagerAdapter getItem(), отображающий позицию 1 вместо 0
У меня есть фрагмент под названием ActiveThreads. Я хочу, чтобы каждый раз, когда пользователь нажимает на элемент на этой странице, он загружает pagerActivity, который использует FragmentPagerActivity, где пользователь может прокручивать.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я нажимаю на один элемент, вместо него отображается элемент NEXT. Я запускал его с отладкой, и он называет текущую позицию, а затем следующую позицию. Однако сначала он показывает следующую позицию, а не первую? Любая идея, что я делаю неправильно?
Код для метода GetItem PostPager Activity в
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;
}
}
});
}
и вот мой новый экземпляр в 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 вот код для активных потоков при нажатии на пункт
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);
}
Посмотрите на showSelec tedItemOnPosition, вот где я загружаю PostPagerActivity OnClick. Есть идеи?
EDIT Из моего журнала кошки
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
Вы можете увидеть изменения идентификаторов? Он отображает элементы, связанные со вторым идентификатором! :(
Заранее спасибо
Привет, пожалуйста, укажите код 'ActiveThreads' - так это то, где вы говорите, что вы звоните. «pagerActivity» - мы можем проверить код, чтобы выяснить, почему он ведет себя так, как вы говорите. – ishmaelMakitla
@ishmaelMakitla done – BilalMH
Пожалуйста, добавьте оператор журнала в 'showItemSelectedAtPosition (int position)', чтобы показать, что такое значение 'position'. Подтвердите, что это так, как вы ожидаете - например, выбирает элемент в первой позиции, показывающий значение '1' для' position'? Это может пролить свет на это. – ishmaelMakitla