用viewpager中的另一个片段替换一个片段

时间:2015-07-03 13:33:01

标签: android android-viewpager fragment

我无法展示我的新片段。基本上我正在做的是我有一个有3页的viewpager,在第二页我隐藏了当前的片段并添加了一个新的。除了我无法看到我的新片段外,一切都很顺利。

My Mainactivity.java

public class MainActivity extends AppCompatActivity {   
ViewPager viewPager = null;
 NavigationDrawerFragement drawerFragement;
 Bitmap image = null;
 int notificationExtra = 0;
 int nid=0;
 Toolbar toolbar;

 private void startGetLocationService() {
        Intent i = new Intent(this, GetUserLocationService.class);  
        startService(i);
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_register);       
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.app_bar);        
    setSupportActionBar(toolbar);

    drawerFragement = (NavigationDrawerFragement) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragement.setUp((DrawerLayout) findViewById(R.id.drawer_layout),toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    getSupportActionBar().setHomeButtonEnabled(false);

    //getSupportActionBar().setIcon(R.drawable.account);
    getSupportActionBar().setTitle("Eventyze");

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

    PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);     

    tabs.setViewPager(viewPager);
}


class MyAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int i) {

        Fragment fragment = null;
        if (i == 0)
            fragment = new ReminderFragment();
        if (i == 1)
            fragment = new EventFragment();
        if (i == 2)
            fragment = new InvitationFragment();                         
        return fragment;
    }           

    @Override
    public CharSequence getPageTitle(int position) {

        if (position == 0)
            return "Reminders";
        if (position == 1)
            return "Events";
        if (position == 2)
            return "Invitations";

        return null;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3;
    }

}

@Override
protected void onResume() {     
    super.onResume();
    if(notificationExtra==1){
        viewPager.setCurrentItem(2);
    }
}

}

第二页上的onclick。

        FragmentManager fragmentManager2 = getFragmentManager();
        FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction();
        InvitedEventsFragment fragment2 = new InvitedEventsFragment();
        fragmentTransaction2.hide(EventFragment.this);          
        fragmentTransaction2.add(R.id.viewpager, fragment2);
        fragmentTransaction2.commit();

我的InvitedEventsFragment.java

public class InvitedEventsFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

我的activity_invited_events_fragment.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/black">

    <Button
    android:id="@+id/btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/appbarcol2"  
    android:text="New Fragment"
    android:textAllCaps="true"
    android:textColor="@android:color/white"
    android:textStyle="bold" />        </LinearLayout>

有人可以告诉我为什么它没有显示任何新片段。

1 个答案:

答案 0 :(得分:0)

如果您正在使用ViewPager,则适配器应管理片段。

    import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

import java.util.List;

public class ExampleAdapter extends FragmentPagerAdapter
{
    List<Fragment> fragmentList;

    public ExampleAdapter(FragmentManager fm, List<Fragment> fragmentList)
    {
        super(fm);
        this.fragmentList = fragmentList;
    }

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

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

    public void removeItem(int position, ViewPager pager)
    {
        pager.setAdapter(null);
        this.fragmentList.remove(position);
        pager.setAdapter(this);
    }
}