Java 替换旧片段以在viewpager中添加新片段

Java 替换旧片段以在viewpager中添加新片段,java,android,android-fragments,Java,Android,Android Fragments,我有这个密码。在设置片段时,我有一个按钮,单击该按钮时,我想查看新片段 public class TabsPagerAdapter extends FragmentPagerAdapter { public TabsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { switch (index) { case 0: // Top Rated fr

我有这个密码。在设置片段时,我有一个按钮,单击该按钮时,我想查看新片段

public class TabsPagerAdapter extends FragmentPagerAdapter {

public TabsPagerAdapter(FragmentManager fm) {
    super(fm);

}

@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Top Rated fragment activity
Log.i("TAB", "Home");
return new HomePage();
case 1:
// Games fragment activity
Log.i("TAB", "Contact");
return new GetContacts();
case 2:
// Movies fragment activity
Log.i("TAB", "Setting");
return new Settings();
}
return null;
}

我把碎片延伸到一页一页

好的,下面是如何在片段A中添加按钮以切换片段c: 1-在xml文件中的片段a中添加按钮,其id如下:

<Button
    android:id="@+id/foo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="go to fragemnt c" />
然后返回到MainActivity,实现buttonClick接口并重写名为buttonClick的方法中的方法(视图v);查看寻呼机的setCurrentItem如下所示:

calss MainActivity implements FragmentA.buttonClick {

   // your code here ...

   public void buttonClicked(View v){
      //get your viewPager var
      viewPager.setCurrentItem(3);
    }

}

我希望这有助于

你有多种方法来实现你的“我想查看新片段”

“新片段”的意思可能是“新内容和ui”,如果是这样的话,你可以“欺骗”你的方式,并用重叠视图膨胀布局,设置为
可见
消失

例如

但是,如果布局非常复杂,这种方法可能会使视图树膨胀。而且,适当的片段可能会做太多的事情,你想把它们分成多个片段

如果是这种情况,您必须了解应用程序的配置更改或重新启动,并处理这些更改(即保存您的状态并重新初始化正确的片段)。如果您对此没有异议,则可以在运行时更改ViewPager中的片段:

public class TabsPagerAdapter extends FragmentPagerAdapter {

    protected Fragment[] fragments;

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
        initFragPageCount();
    }

    private void initFragPageCount() {
        fragments = new Fragment[3];
    }

    @Override
    public int getCount() {
        return fragments.length;
    }

    @Override
    public Fragment getItem(int position) {
        Fragment f = fragments[position];
        if (f == null) {
            f = initFragment(position);
        }
        return f;
    }

    private Fragment initFragment(int position) {
        Fragment f = fragments[position];
        if (f == null) {
            switch (position) {
            case 0:
                f = new HomePage();
                fragments[position] = f;
                break;
            case 1:
                f = new GetContacts();
                fragments[position] = f;
                break;
            case 2:
                f = new Settings();
                fragments[position] = f;
                break;
            }
        }
        return f;
    }

    public void replaceFrag(Fragment f, int index) {
        if (index > 0 && index < fragments.length) {
            fragments[i] = f;
        }
        notifyDataSetChanged();
    }
}
动态添加或删除viewpager中的片段。
要加载不同的片段,请调用setupViewPagerCustom(viewPager)。 e、 g.点击按钮调用:setupViewPagerCustom(viewPager)

private void setupViewPager(ViewPager-ViewPager)
{
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
addFrag(新fragmnet1(),“HOME”);
addFrag(新fragmnet2(),“服务”);
viewPager.setAdapter(适配器);
}
专用void设置ViewPageRCUSTOM(ViewPager ViewPager)
{
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(新fragmnet3(),“联系我们”);
addFrag(新fragmnet4(),“关于我们”);
viewPager.setAdapter(适配器);
}
//Viewpageradapter,处理视图
静态类ViewPagerAdapter扩展了FragmentStatePagerAdapter
{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
@凌驾
public int getItemPosition(对象){
返回PagerAdapter.POSITION\u无;
}
public void addFrag(片段、字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}

那么问题出在哪里?如何在viewpager中将片段替换为新片段。是否要将新片段替换为viewpager中的特定页面?!在这里,我发布了示例代码,并以这种方式进行了尝试
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" >

   <LinearLayout
       android:id="@+id/lyt_stuff_a"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" >

       <TextView
           android:id="@+id/txt_stuff_a"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="This stuff is for content a" />
   </LinearLayout>

   <LinearLayout
       android:id="@+id/lyt_stuff_b"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" >

       <TextView
           android:id="@+id/txt_stuff_b"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="This stuff is for content b"
           android:visibility="gone" />
   </LinearLayout>

</RelativeLayout>
getView().findViewById(R.id.lyt_stuff_a).setVisibility(View.GONE);
getView().findViewById(R.id.lyt_stuff_b).setVisibility(View.VISIBLE);
public class TabsPagerAdapter extends FragmentPagerAdapter {

    protected Fragment[] fragments;

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
        initFragPageCount();
    }

    private void initFragPageCount() {
        fragments = new Fragment[3];
    }

    @Override
    public int getCount() {
        return fragments.length;
    }

    @Override
    public Fragment getItem(int position) {
        Fragment f = fragments[position];
        if (f == null) {
            f = initFragment(position);
        }
        return f;
    }

    private Fragment initFragment(int position) {
        Fragment f = fragments[position];
        if (f == null) {
            switch (position) {
            case 0:
                f = new HomePage();
                fragments[position] = f;
                break;
            case 1:
                f = new GetContacts();
                fragments[position] = f;
                break;
            case 2:
                f = new Settings();
                fragments[position] = f;
                break;
            }
        }
        return f;
    }

    public void replaceFrag(Fragment f, int index) {
        if (index > 0 && index < fragments.length) {
            fragments[i] = f;
        }
        notifyDataSetChanged();
    }
}
adaptPager.replaceFrag(new FragReplacement(), 2); // replaces the third Fragment in the Pager
    private void setupViewPager(ViewPager viewPager)
{
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new fragmnet1(), "HOME");
    adapter.addFrag(new fragmnet2(), "SERVICES");

    viewPager.setAdapter(adapter);
}

private void setupViewPagerCustom(ViewPager viewPager)
{

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    adapter.addFrag(new fragmnet3(), "Contact us");
    adapter.addFrag(new fragmnet4(), "ABOUT US");


    viewPager.setAdapter(adapter);
}

//Viewpageradapter, handles the views

static class ViewPagerAdapter extends FragmentStatePagerAdapter
{
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager){
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    @Override
    public int getItemPosition(Object object){
        return PagerAdapter.POSITION_NONE;
    }

    public void addFrag(Fragment fragment, String title){
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position){
        return mFragmentTitleList.get(position);
    }
}