ViewPager子片段的onCreateView()方法未被调用

时间:2013-01-13 13:13:11

标签: android android-fragments android-viewpager

MainActivity.java

public class MainActivity extends SherlockFragmentActivity {

 static MyListfragment mf;
 ViewPager mpager;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        mf = new MyListfragment();
        ft.add(android.R.id.content,mf).commit();
}}

MyListfragment.java

public class MyListfragment extends SherlockListFragment {

MyDisplayfragment tempFrag;
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    Connector.selection = position;
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        if(position==0)
        {
        tempFrag=new MyDisplayfragment();
        tempFrag.setLayout(R.layout.law);
        subFragmentAdapter mAdapter = new subFragmentAdapter(getChildFragmentManager());
        tempFrag.setViewPagerAdapter(mAdapter);
        }
    ft.replace(android.R.id.content,tempFrag);
    ft.addToBackStack(null);
    ft.commit();

}


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
    setListAdapter(new ArrayAdapter<String>(getActivity(),
            layout, Connector.list));
}}

MyDisplayfragment.java

public class MyDisplayfragment extends SherlockFragment {

int resource;
FragmentPagerAdapter mAdapter;
ViewPager v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    if(Connector.selection==-1)
        resource=R.layout.displayfragment;
    return inflater.inflate(resource, container, false);
}

public void setViewPagerAdapter(FragmentPagerAdapter x)
{
    mAdapter=x;
}

public void setLayout(int layout)
{
    resource=layout;
}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onViewCreated(view, savedInstanceState);
    ViewPager pager=(ViewPager) view.findViewById(R.id.mpager);
    pager.setAdapter(mAdapter);
}}

subFragment.java

public final class subFragment extends SherlockFragment {

private int layout;
public static subFragment newInstance(int content) {
    subFragment fragment = new subFragment();
    fragment.layout=content;
    return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(layout,container,false);
}}

subFragmentAdapter.java

public class subFragmentAdapter extends FragmentPagerAdapter{


int[] LAYOUT={R.layout.cccc,R.layout.aaaa,R.layout.bbb};
private int mCount;

public subFragmentAdapter(FragmentManager fm) {
    super(fm);
    mCount = LAYOUT.length;
}

@Override
public Fragment getItem(int position) {
    return subFragment.newInstance(LAYOUT[position]);
}

@Override
public int getCount() {
    return mCount;
}

}

Connector.java

public class Connector {

static int selection = -1;
static String list[] = { "Law" };}

在上述项目中 1)MyListfragment.java用于导航
2)MyDisplayfragment.java用于根据MyListFragment中的选择进行显示 3)Connector.java用于在上述两个片段之间进行通信 4)subFragment.java用于填充带有碎片的Viewpager 5)subFragmentAdapter.java是Viewpager的适配器

当我运行这个项目时,viewpager似乎是空白的并且没有显示任何子片段,并且在调试后我看到没有调用subFragment.java的onCreateView()方法。 我的问题是为什么没有调用onCreateView()方法

1 个答案:

答案 0 :(得分:-1)

请参阅Luksprog的评论以获得答案。