转到ViewPager中的下一页

Ake*_*Jha 5 android android-fragments android-viewpager

ViewPager我的MainActivity中有一个.其中的每一页都是片段.因此,每次向右或向左滑动时,都会创建一个新的片段实例,并相应地更新片段视图.

我也有两个按钮:LEFTRIGHT导航.这些按钮位于片段内,而不在活动中.用户可以滑动或者按相关按钮在页面之间导航.

问题在于:由于我正在通过MainActivity更改视图,如何onClick在Activity中检测这些按钮的事件以更新片段?

这是PagerAdapter类(从所有地方删除所有不相关的代码):

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        // logic part for the views.

        return PlaceholderFragment.newInstance(sectionNumber, questionStatus, questionOrder, showNext, showPrevious);
    }
Run Code Online (Sandbox Code Playgroud)

这是PlaceHolderFragment班级:

public class PlaceholderFragment extends Fragment{

    //some global variables

    public static PlaceholderFragment newInstance(int sectionNumber, int questionStatus, String questionOrder, boolean showNext, boolean showPrevious) {
        PlaceholderFragment fragment = new PlaceholderFragment();

        //setting up the arguments
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.explanation_fragment, container, false);

        //code for filling up all the views

        RightButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //can I do something here?
            }
        });

        return rootView;
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息: 我必须将导航按钮保留在片段本身而不是活动中.

Ram*_*hat 11

在你的片段中写一个接口,如:

public class PlaceholderFragment extends Fragment{
        private OnButtonClickListener mOnButtonClickListener;

        interface OnButtonClickListener{
        void onButtonClicked(View view);
        }

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            try {
                mOnButtonClickListener = (OnButtonClickListener) context;
            } catch (ClassCastException e) {
                throw new ClassCastException(((Activity) context).getLocalClassName()
                            + " must implement OnButtonClickListener");
            }
        }

        yourButtons.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mOnButtonClickListener.onButtonClicked(v);
            }
        });
     }   
Run Code Online (Sandbox Code Playgroud)

在你的主要活动中:

class MainActivity extends AppCompatActivity implements   OnButtonClickListener{

    @Override
    void onButtonClicked(View view){
        int currPos=yourPager.getCurrentItem();

        switch(view.getId()){

            case R.id.leftNavigation:
            //handle currPos is zero
            yourPager.setCurrentItem(currPos-1);
            break;

            case R.id.rightNavigation:
            //handle currPos is reached last item
            yourPager.setCurrentItem(currPos+1);
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Kis*_*nki 6

对于KotlinViewPager2

上一页:

val currPos: Int = xyzViewPager.currentItem
if (currPos != 0) {
   xyzViewPager.currentItem = currPos - 1
}
Run Code Online (Sandbox Code Playgroud)

下一页:

val currPos: Int = xyzViewPager.currentItem
if ((currPos + 1) != xyzViewPager.adapter?.count) {
    xyzViewPager.currentItem = currPos + 1
}
Run Code Online (Sandbox Code Playgroud)


ami*_*a14 6

使用 kotlin 扩展函数:

fun ViewPager2.nextPage(smoothScroll: Boolean = true): Boolean {
    if ((currentItem + 1) < adapter?.itemCount ?: 0) {
        setCurrentItem(currentItem + 1, smoothScroll)
        return true
    }
    //can't move to next page, maybe current page is last or adapter not set.
    return false
}

fun ViewPager2.previousPage(smoothScroll: Boolean = true): Boolean {
    if ((currentItem - 1) >= 0) {
        setCurrentItem(currentItem - 1, smoothScroll)
        return true
    }
    //can't move to previous page, maybe current page is first or adapter not set.
    return false
}
Run Code Online (Sandbox Code Playgroud)