我试图使用viewpager来显示几个片段.目前我只有一个片段,但它似乎永远不会被实例化.我尝试使用pager.setCurrentItem(0),但永远不会调用适配器中的getItem方法.有谁知道为什么我的片段没有加载到下面的代码?
主要活动
public class MainActivity extends SherlockFragmentActivity {
MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
// Create the FragmentPager Adapter and assign it to the viewpager
adapter = new MyPagerAdapter( getSupportFragmentManager(),this );
ViewPager pager = ( ViewPager ) findViewById( R.id.pager );
pager.setAdapter( adapter );
pager.setCurrentItem( 0 );
// Setup the tab page indicator
TabPageIndicator indicator = ( TabPageIndicator ) findViewById( R.id.indicator );
indicator.setViewPager( pager );
}
class MyPagerAdapter extends FragmentStatePagerAdapter {
private SparseArray
MainActivity布局
ScheduleListFragment
public class ScheduleListFragment extends SherlockListFragment implements ViewPagerPage {
private ScheduleAdapter adapter;
private final String TITLE = "Schedule";
public static ScheduleListFragment newInstance() {
ScheduleListFragment newFrag = new ScheduleListFragment();
Bundle args = new Bundle();
newFrag.setArguments( args );
return newFrag;
}
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
return inflater.inflate( R.layout.fragment_schedule_list,null );
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
inflater.inflate( R.menu.fragment_schedule_list,menu );
}
// Container Activity must implement this interface
public interface OnAddItemClickedListener {
public void onAddItemClicked();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch ( item.getItemId() ) {
case R.id.add_item:
Intent myIntent = new Intent( getActivity(),AddScheduleItemActivity.class );
startActivityForResult( myIntent,1 );
return true;
default:
return super.onOptionsItemSelected( item );
}
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated( savedInstanceState );
setHasOptionsMenu( true );
adapter = new ScheduleAdapter( getActivity() );
setListAdapter( adapter );
}
private class SampleItem {
public String tag;
public int iconRes;
public SampleItem(String tag,int iconRes) {
this.tag = tag;
this.iconRes = iconRes;
}
}
public class ScheduleAdapter extends ArrayAdapter
片段布局
谢谢,
弥敦道
现有解决方案
更改了适配器构造函数以初始化第一个片段并将其添加到内部映射.有没有人看到这样做有什么问题,或者改进上面发布的任何代码?谢谢!
public MyPagerAdapter(FragmentManager fm,Activity context) {
super( fm );
fragmentPageMap = new SparseArray
最佳答案
getCount()在MyPagerAdapter中返回0,因此不会创建片段,如果要实例化N片段,它应返回N.
原文链接:https://www.f2er.com/android/430792.htmlfragmentPageMap是在构造函数中创建的,当调用getCount()并在getItem(index)之前调用getCount()时为空,这就是getCount()返回0的原因
在这种情况下,您不需要切换,因为您每次都要实例化相同的Fragment.但是,如果您在实例化不同的碎片,那么您将需要它.
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new Fragment1();
case 1:
return new Fragment2();
}
return null;
}