我的MainActivity中有一个ViewPager。其中的每个页面都是一个 fragment 。因此,每次我向右或向左滑动时,都会创建 fragment 的新实例,并相应地更新 fragment View 。

我还有两个按钮:LEFTRIGHT用于导航。这些按钮在 fragment 内位于,而不在Activity中。用户可以滑动或另选地按下相关按钮在页面之间导航。

这是问题所在:由于我正在通过MainActivity更改 View ,因此如何检测 Activity 中这些按钮的onClick事件以更新 fragment ?

这是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);
    }

这是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;
    }
}

更多信息:
我必须将导航按钮保留在 fragment 本身中,而不要保留在 Activity 中。

最佳答案

在您的 fragment 中编写一个接口(interface),例如:

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

在您的主要 Activity 中:
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;
        }
    }
}

关于android - 转到ViewPager中的下一页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36600229/

10-10 08:53
查看更多