Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在FragmentPagerAdapter中交换碎片_Android_Fragment_Fragmentpageradapter - Fatal编程技术网

Android 在FragmentPagerAdapter中交换碎片

Android 在FragmentPagerAdapter中交换碎片,android,fragment,fragmentpageradapter,Android,Fragment,Fragmentpageradapter,我已经为三个片段实现了默认的片段寻呼机适配器。它工作正常,但我想要的是从这三个片段中的一个内部交换片段(不是从活动)。我试图搜索ans,但找不到它 编辑: 我正在使用带滑块的默认tablayout活动。我没有使用自定义fragmentPagerAdapter。在主要活动中实现了以下类 public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(Fragm

我已经为三个片段实现了默认的片段寻呼机适配器。它工作正常,但我想要的是从这三个片段中的一个内部交换片段(不是从活动)。我试图搜索ans,但找不到它

编辑: 我正在使用带滑块的默认tablayout活动。我没有使用自定义fragmentPagerAdapter。在主要活动中实现了以下类

public class SectionsPagerAdapter extends FragmentPagerAdapter { 
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int position) {
            switch (position){
                case 0:
                    return new FragmentTest1();
                case 1:
                    return new FragmentTest2();
                case 2:
                    return new FragmentTest3();
                default:
                    return null;
            }}
        @Override
        public int getCount() {
            return 3;
        }
main活动 下面给出了主要活动的创建方法

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slider);    
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);

    }
碎片测试1 从FragmentTest1,我想转换到另一个动作片段

public class FragmentTest1 extends android.support.v4.app.Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab_log, container, false);
        Button button = rootView.findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
        return rootView;
    }
}

我想将单击事件转换为另一个片段…

我记不起执行此操作的确切代码,但这是可能的! 如果您通过片段访问片段父级(应该是片段管理器?),然后告诉片段管理器切换到片段x


我记得不久前在一个应用程序中这样做了。。虽然不漂亮,但它很管用!(如果它能工作,那就不傻了……或者是吗?

我有相同的实现,我有一个
ViewPagerFragment
,它使用
ImageAdapter
在片段之间交换,这是一个
ImageFragment
,所以基本上你需要一个适配器

查看页面片段:

public class ViewPagerFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_viewpager, container, false);
        ButterKnife.bind(this, view);

        mAdapter = new ImageAdapter(getChildFragmentManager(), yourObjects);
        mViewPager.setAdapter(mAdapter);

        return view;
}
public class ImageAdapter extends FragmentStatePagerAdapter {

    private ArrayList<YourObject> mYourObjects;

    public ImageAdapter(FragmentManager fm, ArrayList<YourObject> yourObjects) {
        super(fm);
        mYourObjects = yourObjects;
    }

    @Override
    public Fragment getItem(int position) {
        return new ImageFragment().newInstance(position, mYourObjects);
    }

    @Override
    public int getCount() {
        return mYourObjects.size();
    }
}
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_image, container, false);
        ButterKnife.bind(this, view);
        mClickedImagePosition = getArguments().getInt(POSITION_KEY);
        mYourObject = getArguments().getParcelableArrayList(YOUR_OBJECT_KEY);

        // set your objects here

        return view;
    }

    public ImageFragment newInstance(int position, ArrayList<YourObject> yourObjects) {
        ImageFragment fragment = new ImageFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(POSITION_KEY, position);
        bundle.putParcelableArrayList(YOUR_OBJECT_KEY, yourObjects);
        fragment.setArguments(bundle);

        return fragment;
    }
图像适配器:

public class ViewPagerFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_viewpager, container, false);
        ButterKnife.bind(this, view);

        mAdapter = new ImageAdapter(getChildFragmentManager(), yourObjects);
        mViewPager.setAdapter(mAdapter);

        return view;
}
public class ImageAdapter extends FragmentStatePagerAdapter {

    private ArrayList<YourObject> mYourObjects;

    public ImageAdapter(FragmentManager fm, ArrayList<YourObject> yourObjects) {
        super(fm);
        mYourObjects = yourObjects;
    }

    @Override
    public Fragment getItem(int position) {
        return new ImageFragment().newInstance(position, mYourObjects);
    }

    @Override
    public int getCount() {
        return mYourObjects.size();
    }
}
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_image, container, false);
        ButterKnife.bind(this, view);
        mClickedImagePosition = getArguments().getInt(POSITION_KEY);
        mYourObject = getArguments().getParcelableArrayList(YOUR_OBJECT_KEY);

        // set your objects here

        return view;
    }

    public ImageFragment newInstance(int position, ArrayList<YourObject> yourObjects) {
        ImageFragment fragment = new ImageFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(POSITION_KEY, position);
        bundle.putParcelableArrayList(YOUR_OBJECT_KEY, yourObjects);
        fragment.setArguments(bundle);

        return fragment;
    }
公共类ImageAdapter扩展FragmentStatePagerAdapter{
私人ArrayList mYourObjects;
公共图像适配器(FragmentManager fm,ArrayList yourObjects){
超级(fm);
mYourObjects=您的对象;
}
@凌驾
公共片段getItem(int位置){
返回新的ImageFragment().newInstance(位置,myourObject);
}
@凌驾
public int getCount(){
返回mYourObjects.size();
}
}
最后是图像片段:

public class ViewPagerFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_viewpager, container, false);
        ButterKnife.bind(this, view);

        mAdapter = new ImageAdapter(getChildFragmentManager(), yourObjects);
        mViewPager.setAdapter(mAdapter);

        return view;
}
public class ImageAdapter extends FragmentStatePagerAdapter {

    private ArrayList<YourObject> mYourObjects;

    public ImageAdapter(FragmentManager fm, ArrayList<YourObject> yourObjects) {
        super(fm);
        mYourObjects = yourObjects;
    }

    @Override
    public Fragment getItem(int position) {
        return new ImageFragment().newInstance(position, mYourObjects);
    }

    @Override
    public int getCount() {
        return mYourObjects.size();
    }
}
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_image, container, false);
        ButterKnife.bind(this, view);
        mClickedImagePosition = getArguments().getInt(POSITION_KEY);
        mYourObject = getArguments().getParcelableArrayList(YOUR_OBJECT_KEY);

        // set your objects here

        return view;
    }

    public ImageFragment newInstance(int position, ArrayList<YourObject> yourObjects) {
        ImageFragment fragment = new ImageFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(POSITION_KEY, position);
        bundle.putParcelableArrayList(YOUR_OBJECT_KEY, yourObjects);
        fragment.setArguments(bundle);

        return fragment;
    }
@覆盖
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u图像,容器,错误);
ButterKnife.bind(这个,视图);
mClickedImagePosition=getArguments().getInt(位置键);
mYourObject=getArguments().getParcelableArrayList(您的\u对象\u键);
//在此处设置对象
返回视图;
}
公共ImageFragment newInstance(int位置,ArrayList对象){
ImageFragment=新ImageFragment();
Bundle=新Bundle();
bundle.putInt(位置\键,位置);
bundle.putParcelableArrayList(您的\u对象\u键,您的对象);
fragment.setArguments(bundle);
返回片段;
}

我省略了一些样板代码,比如膨胀视图,但这会起作用。如果您有任何问题,请告诉我。

在这种情况下,片段只能通过viewpager访问(据我所知),要使viewpager成为子片段,必须在MainActivity中使viewpager保持静态。
publicstaticviewpager-ViewPager
访问寻呼机
ParentActivity.viewPager.arrow滚动(View.FOCUS\u RIGHT)
行动
ParentActivity.viewPager.arrow滚动(View.FOCUS\u左)

参考资料:

我试过了,但没用。我附上下面的代码<代码>最终碎片事务ft=getFragmentManager().beginTransaction();ft.replace(R.id.container,new AppList(),“Log”);ft.addToBackStack(空);ft.commit()谢谢,但我正在使用tablayout活动。我更新了我的问题。我也会尝试你的ans。我没有太多时间,所以我对重新实施tablayout活动犹豫不决。@khan你是用viewpager
tablayout设置tablayout的吗。setupWithViewPager(viewpager)
?@khan我想你不必感到沮丧,我正在尽我所能帮助你,你需要提供更多的代码,因为我会继续猜测,就像你的viewpager片段,你的适配器在哪里使用,以及单页片段。我真的很感谢你的帮助,我一点也不沮丧。如果我听起来很沮丧,我很抱歉。我再次更新了我的问题。请看一看。再次感谢您的帮助…@khan别担心:)我自己也有点苛刻:)我相信在您的情况下,当您执行
mSectionsPagerAdapter=new SectionsPagerAdapter(getSupportFragmentManager())
您需要传递
getChildFragmentManager()
而不是
getSupportFragmentManager()
,因为在处理viewpager中的嵌套片段时,内部片段由viewpager管理,而不是由活动管理。