PageViewer вложен во фрагмент - PullRequest
0 голосов
/ 08 января 2019

я пытаюсь использовать ViewPager внутри фрагмента, я уже видел, что мне нужно использовать getChildFragmentManager (), но я не могу найти способ заставить его работать. По сути, у меня есть макет ящика с боковым меню, в котором я могу выбрать фрагмент, который хочу использовать. В одном из этих фрагментов мне нужен ViewPager с 2 субфрагментами. Когда я пытаюсь запустить фрагмент с субфрагментами, обычно я получаю сообщение об ошибке «необходимо реализовать OnFragmentInteractionListener».

Код, который у меня есть на самом деле, если я запускаю его как действие, он идет хорошо, но фрагмент является причиной сбоя

public class Calculator extends Fragment implements Basic.OnFragmentInteractionListener, Cientific.OnFragmentInteractionListener{

private SectionsPagerAdapter mSectionsPagerAdapter;
private OnFragmentInteractionListener mListener;
private ViewPager mViewPager;

public Calculator() {
    // Required empty public constructor
}
public static Calculator newInstance(String param1, String param2) {
    Calculator fragment = new Calculator();
    Bundle args = new Bundle();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set up the ViewPager with the sections adapter.

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
        mViewPager = (ViewPager) getView().findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        //here i already tried using getChildFragmentManager() 
        // but i dont know if i used it wrong
    }


}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_calculator, container, false);
}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}


public interface OnFragmentInteractionListener {

    void onFragmentInteraction(Uri uri);
}

@Override
public void onFragmentInteraction(Uri uri) {

}


public static class PlaceholderFragment extends Fragment {

    private static final String ARG_SECTION_NUMBER = "section_number";

    public PlaceholderFragment() {
    }


    public static Fragment newInstance(int sectionNumber) {
        Fragment fragment=null;

        switch (sectionNumber){
            case 1: fragment=new Basic();
                break;
            case 2: fragment=new Cientific();
                break;
        }

        return fragment;
    }

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


public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 2 total pages.
        return 2;
    }
}

1 Ответ

0 голосов
/ 08 января 2019

context, полученный в onAttach(Context context), является экземпляром Activity, поэтому, чтобы заставить его работать, вам нужно реализовать OnFragmentInteractionListener в вашем Activity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...