Android FragmentPagerAdapter getItem()显示位置1而不是0

Android FragmentPagerAdapter getItem()显示位置1而不是0,android,fragmentpageradapter,Android,Fragmentpageradapter,我已经看了这里的大多数答案,但找不到适合我的答案 我有一个称为ActiveThreads的片段,我希望它是这样的:每当用户单击此页面上的某个项目时,它都会加载一个PageActivity,它使用一个FragmentPageActivity,用户可以在其中滚动 我遇到的问题是,当我点击一个项目时,它会显示下一个项目。我用debug运行它,它调用当前位置,然后调用下一个位置。但是,它首先显示下一个位置,而不是第一个位置?知道我做错了什么吗 PostPage活动的getItem方法的代码 privat

我已经看了这里的大多数答案,但找不到适合我的答案

我有一个称为ActiveThreads的片段,我希望它是这样的:每当用户单击此页面上的某个项目时,它都会加载一个PageActivity,它使用一个FragmentPageActivity,用户可以在其中滚动

我遇到的问题是,当我点击一个项目时,它会显示下一个项目。我用debug运行它,它调用当前位置,然后调用下一个位置。但是,它首先显示下一个位置,而不是第一个位置?知道我做错了什么吗

PostPage活动的getItem方法的代码

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;
}
编辑以下是我按下项目时活动线程的代码

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

}
看看showselecteditemopposition方法,这就是我在单击时加载PostageActivity的地方。有什么想法吗

从我的日志猫编辑

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
你能看到id的变化吗?它正在显示与第二个ID相关的项目!:(



提前感谢

似乎您的mThreadItems.get(位置);返回了错误的对象。

似乎您的mThreadItems.get(位置);返回错误的对象。

您好,请包含
ActiveThreads的代码
-因为这是调用
PagePractivity的地方
-我们可以检查代码,找出它为什么会像您所说的那样运行。@ishmaelMakitla请在
showItemSelectedAtPosition(int位置)中添加Log语句
显示
位置的值是多少。确认这是否如您所期望的那样-例如,在第一个位置选择项是否显示
位置
的值1
?这可能会对此有所帮助。@ishmaelMakitla在底部发布了一些我的日志,因为您可以尝试这样的方法:
mThreads=mThreadItems.get(mViewPager.getCurrentItem())
并查看其是否如您所期望的那样工作。您好,请包括
活动线程的代码
-因为您说您在这里调用
页面实用性
-我们可以检查代码,以找出其行为与您所说的一致的原因。@ishmaelMakitla请勿在
showItemSelectedAtPosition(int position)中添加Log语句
显示
位置的值是多少。确认这是否如您所期望的那样-例如,在第一个位置选择项是否显示
位置
的值1
?这可能会对此有所帮助。@ishmaelMakitla在底部发布了一些我的日志,因为您可以尝试这样的方法:
mThreads=mThreadItems.get(mViewPager.getCurrentItem())
并查看这是否如您所期望的那样工作。它获取正确的对象,然后获取第二个对象,这就是传递的对象,但这是一种正常的行为。当前和下一个片段被加载,但在两个不同的getItem调用中。通常Android会调用getItem两次,您应该使用logcat进行检查。我认为您的实现on是错误的。可能使用全局成员会破坏片段创建。更干净的方法是使用新类作为适配器,而不是使用内部类。好的,我该如何解决这个问题?抱歉,无意中发布了消息的一部分,现在我添加了restIt,它获取正确的对象,然后获取第二个对象,这就是what被传递,但这是一种正常行为。当前片段和下一个片段被加载,但在两个不同的getItem调用中。通常Android会调用getItem两次,你应该用logcat检查。我认为你的实现是错误的。也许使用全局成员会破坏你的片段创建。更干净的方法是使用一个新类作为适配器,而不是使用内部类。好的,我该如何解决这个问题?很抱歉,不小心只发布了消息的一部分,现在我添加了其余部分