Java 如何在viewpager中显示片段?
我的应用程序目前由3个片段组成,其中2个片段在actionbarsherlock Library上显示为选项卡。 每当我尝试用我的第三个片段替换我的第一个片段时,新视图都是空白的 如何显示第三个?调用方法getItem()时是否需要返回新的实例化片段 这是我的应用程序布局的一个例子Java 如何在viewpager中显示片段?,java,android,xml,android-fragments,android-viewpager,Java,Android,Xml,Android Fragments,Android Viewpager,我的应用程序目前由3个片段组成,其中2个片段在actionbarsherlock Library上显示为选项卡。 每当我尝试用我的第三个片段替换我的第一个片段时,新视图都是空白的 如何显示第三个?调用方法getItem()时是否需要返回新的实例化片段 这是我的应用程序布局的一个例子 public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener { ViewPager mVi
public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
ViewPager mViewPager;
myPageAdapter mPageAdapter;
List<Fragment> fragments;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragments = new Vector<Fragment>();
fragments.add(LoginFragment.newInstance());
fragments.add(EventFragment.newInstance());
mPageAdapter = new myPageAdapter(getSupportFragmentManager(), fragments, this);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setLogo(R.drawable.logo);
actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mPageAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
invalidateOptionsMenu();
}
});
for (int i = 0; i < mPageAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab().setText(mPageAdapter.getPageTitle(i)).setTabListener(this));
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.itemRefresh).setVisible(mViewPager.getCurrentItem() == 1);
menu.findItem(R.id.itemArchive).setVisible(mViewPager.getCurrentItem() == 0);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.layout.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.itemRefresh:
Toast.makeText(this, "updating page", Toast.LENGTH_SHORT).show();
return true;
case R.id.itemArchive:
displayArchive();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void displayArchive() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.pager, ArchiveFragment.newInstance());
ft.addToBackStack(null);
ft.commit();
}
公共类MainActivity扩展SherlockFragmentActivity实现ActionBar.TabListener{
ViewPager mViewPager;
myPageAdapter;
列出片段;
ActionBar ActionBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
片段=新向量();
add(LoginFragment.newInstance());
add(EventFragment.newInstance());
mPageAdapter=新的myPageAdapter(getSupportFragmentManager(),片段,此);
actionBar=getSupportActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
actionBar.setLogo(R.drawable.logo);
actionBar.setDisplayOptions(0,actionBar.DISPLAY\u SHOW\u TITLE);
mViewPager=(ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mPageAdapter);
mViewPager.setOnPageChangeListener(新的ViewPager.SimpleOnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
actionBar.setSelectedNavigationItem(位置);
无效操作菜单();
}
});
对于(int i=0;i
页面适配器
public class myPageAdapter extends FragmentPagerAdapter {
private Context context;
private List<Fragment> fragments;
public myPageAdapter(FragmentManager fm, List<Fragment> fragments, Context context) {
super(fm);
this.context = context;
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public String getPageTitle(int position) {
switch (position) {
case 0:
return context.getString(R.string.title_fragment1);
case 1:
return context.getString(R.string.title_fragment2);
default:
return null;
}
}
公共类myPageAdapter扩展了FragmentPagerAdapter{
私人语境;
私有列表片段;
公共myPageAdapter(FragmentManager fm、列表片段、上下文){
超级(fm);
this.context=上下文;
this.fragments=片段;
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
公共字符串getPageTitle(int位置){
开关(位置){
案例0:
返回context.getString(R.string.title\u fragment1);
案例1:
返回context.getString(R.string.title\u fragment2);
违约:
返回null;
}
}
}
主要活动xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
提前感谢。我发现我没有将它们存储在arraylist中,而是在即将检索它们时对它们进行了实例化
当我想在两个片段之间切换时,我通过删除,然后返回一个特定片段来处理它,在我通知数据集已更改之后。。检查此示例,如果它有助于Hanks,但这不是我搜索的。我已经可以显示我有选项卡的片段。所以我需要的是能够显示第三个片段t、 它不在选项卡栏中。fragment由一个活动托管。所以我想您需要一个托管第三个片段的活动我知道,我已经有一个SherlockFragmentActivity,它的行为类似于一个活动。为什么我需要另一个活动来托管第三个片段?