android – ViewPager片段 – 片段未显示

前端之家收集整理的这篇文章主要介绍了android – ViewPager片段 – 片段未显示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图使用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.

fragmentPageMap是在构造函数中创建的,当调用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;
}
原文链接:https://www.f2er.com/android/430792.html

猜你在找的Android相关文章