如何在Android开发中正确获取ViewPager的当前“页码”

7 浏览
0 Comments

如何在Android开发中正确获取ViewPager的当前“页码”

抱歉,如果我的问题很愚蠢,我的错误很明显,但我现在学习Java和Android开发已经一周了,所以对于我代码的任何建设性批评,甚至与我的问题无关的批评,我都非常欢迎!谢谢你的帮助和时间。\n我目前的情况是,我正在尝试确定我在ViewPager设置中处于第几页。基本上,我有一堆创建的\"forms\",它们是\"UserFrament.java\"片段的实例。该表单从几个编辑文本中收集用户输入,并在按钮按下时,希望存储数据并转到下一个片段(我目前认为这是有效的)。然而,现在,我正在尝试确定我当前所在的页面,以便如果它在最后一页(存储所有数据,将其放入一个意图,然后启动另一个活动以处理数据),可以让我的\'onClick\'方法执行不同的任务。\n所以,目前我在我的\'UserFragment.java\'里有以下代码:\n

int currentviewnum =  ((FirstFragment) getActivity()).getPager().getCurrentItem();
String pagenum = Integer.toString(currentviewnum);

\n现在,FirstFragment是设置ViewPager等的活动。我的适配器是\"FragmentAdapter.java\"。\n使用我的当前设置,当我将字符串\'pagenum\'打印到每个ViewPager页面的随机文本视图上时,当我切换到下一页(或使用我的按钮导航)时,数字就不正确了。假设我有5个页面(用户定义有多少个表单),那么FirstFragment会接收到一个定义它创建的实例数量的意图。数字序列是像这样的:“0, 0, 1, 2, 3\"。然后当我滚动回来时,它会做出这样的行为:“3, 2, 3, 2, 1\"。所以我不知道为什么它会如此混乱。\n以下是我的UserFragment.java的代码:\n

package com.example.thinice;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class UserFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.layout_avgcalcform,
                container, false);
        final EditText markc = (EditText)rootView.findViewById(R.id.editTextASSMARK);
        final EditText marktotc = (EditText)rootView.findViewById(R.id.editTextASSTOT);
        final EditText assvalc = (EditText)rootView.findViewById(R.id.editTextASSWORTH);
        int currentviewnum =  ((FirstFragment) getActivity()).getPager().getCurrentItem();
        String pagenum = Integer.toString(currentviewnum);
        TextView tv = (TextView) rootView.findViewById(R.id.avg_testtv);
        tv.setText(pagenum);
        Button b = (Button) rootView.findViewById(R.id.button1);
        b.setOnClickListener( new View.OnClickListener(){
            public void onClick(View v){
                int currentviewnum =  ((FirstFragment) getActivity()).getPager().getCurrentItem();
                ((FirstFragment) getActivity()).saveData(new  Question(markc.getText().toString(),marktotc.getText().toString(),assvalc.getText().toString()));
                ((FirstFragment) getActivity()).getPager().setCurrentItem(currentviewnum+1);
            }
        });
        return rootView;
    }   
}

\n如果您需要查看我的其他代码,请告诉我。但这真的让我很烦恼。\n所以,如果有人能帮帮我,那就太好了!非常感谢您!

0
0 Comments

问题出现的原因:用户想要从ViewPager中获取当前的页面编号,但对于如何正确获取这个编号感到困惑。

解决方法:

1. 在Fragment中使用setArguments方法来修改Fragment。通过传递页面的编号作为参数来修改Fragment。可以参考以下链接了解setArguments方法的使用:[How to use setArguments() and getArguments() methods in Fragments?](https://stackoverflow.com/questions/5425568)

2. 在持有ViewPager的FragmentActivity中使用以下代码来获取当前页面的索引:

mViewPager.setOnPageChangeListener(this);
mViewPager.getCurrentItem();

3. 在FragmentPagerAdapter中将当前页面的索引传递给Fragment:

public Fragment getItem(int position) {
    UserFragment form = new UserFragment();
    Bundle bundl = new Bundle();
    bundl.putString("index", getCurrentPage);
    form.setArguments(bundl);
    return form;
}

希望以上方法能够帮助解决问题。如果需要更详细的实现步骤,请提供更多细节。谢谢!

0
0 Comments

问题出现的原因是ViewPager在实例化当前页面的前后页面的Fragment,以实现平滑的滑动效果。通过调用setOffScreenPageLimit(int)方法可以设置当前页面两侧应该保留的页面数量,默认为1。需要注意的是,ViewPager的第一个位置是0,而不是1。

解决方法是在PagerAdapter的getItem()方法中获取页面的位置,并将其作为参数传递给每个UserFragment的实例。然后在UserFragment中可以通过getArguments().getInt("page_position")来获取页面位置。

另外,可以尝试使用fragments.get(position)来获取Fragment。这行代码的作用是根据位置获取相应的Fragment实例。

以下是对上述内容进行整理的文章:

在Android开发中,如果需要从ViewPager中获取当前页面的页码,可能会出现一些错误的页码。这是因为ViewPager为了实现平滑的滑动效果,在实例化当前页面的前后页面的Fragment。通过setOffScreenPageLimit(int)方法可以设置当前页面两侧应该保留的页面数量,默认为1。需要注意的是,ViewPager的第一个位置是0,而不是1。

具体来说,当设置了ViewPager的适配器并显示第一页(position=0)时,第二页的Fragment也会被创建,而当前页面的位置仍然是0。当滑动到第二页时,第三个Fragment会被创建,此时当前页面的位置是1。依此类推,当滑动到第四页时,当前页面的位置是2。

为了获取页面位置,可以在PagerAdapter的getItem()方法中获取位置,并将其作为参数传递给每个UserFragment的实例。然后在UserFragment中可以通过getArguments().getInt("page_position")来获取页面位置。

以下是一个示例代码:

public Fragment getItem(int position) {
    UserFragment fragment = new UserFragment();
    Bundle args = new Bundle();
    args.putInt("page_position", position + 1);
    fragment.setArguments(args);
    return fragment;
}

然后,在UserFragment中可以通过以下代码获取页面位置并显示在TextView中:

TextView tv = (TextView) rootView.findViewById(R.id.avg_testtv);
tv.setText(String.valueOf(getArguments().getInt("page_position")));

另外,还可以尝试使用fragments.get(position)来获取Fragment实例,具体代码如下:

public Fragment getItem(int position) {
    UserFragment fragment = fragments.get(position);
    Bundle args = new Bundle();
    args.putInt("page_position", position + 1);
    fragment.setArguments(args);
    return fragment;
}

以上就是解决这个问题的方法,希望对你有帮助。如果还有其他问题,请随时提问。

0