Android 碎片中的碎片PageRadapter

Android 碎片中的碎片PageRadapter,android,android-layout,fragmentpageradapter,Android,Android Layout,Fragmentpageradapter,我想要一个类中有4个可滚动选项卡的选项卡。我实现了以下示例,它可以正常工作: mAdapter = new MyAdapter(getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mAdapter); 公共静态类ArrayListFragment扩展了ListFragment{ 国际货币基金组织; 静态ArrayListFragment

我想要一个类中有4个可滚动选项卡的选项卡。我实现了以下示例,它可以正常工作:

mAdapter = new MyAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAdapter);

公共静态类ArrayListFragment扩展了ListFragment{
国际货币基金组织;
静态ArrayListFragment newInstance(int num){
ArrayListFragment f=新的ArrayListFragment();
Bundle args=新Bundle();
args.putInt(“num”,num);
f、 设置参数(args);
返回f;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mNum=getArguments()!=null?getArguments().getInt(“num”):1;
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
开关(mNum){
案例0:
视图v0=充气机。充气(R.layout.fragment\u pager\u列表,容器,错误);
返回v0;
案例1:
视图v1=充气机。充气(R.layout.fragment\u pager\u list,container,false);
返回v1;
案例2:
视图v2=充气机。充气(R.layout.fragment\u pager\u列表,容器,false);
返回v2;
案例3:
视图v3=充气机。充气(R.layout.fragment\u pager\u list,container,false);
返回v3;
违约:
视图vd=充气机。充气(R.layout.fragment\u pager\u列表,容器,错误);
返回vd;
}
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,Titles));
}
//标题={“TAB1”、“TAB2”、“TAB3”、“TAB4”}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
Log.i(“碎片列表”,“单击的项目:”+id);
}
}
其中,我在每个视图中放置的fragment_pager_列表布局如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:drawable/gallery_thumb">

<TextView android:id="@+id/text"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:gravity="center_vertical|center_horizontal"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="HELLO WORLD"/>

<!-- The frame layout is here since we will be showing either
the empty view or the list view.  -->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1" >
    <!-- Here is the list. Since we are using a ListActivity, we
         have to call it "@android:id/list" so ListActivity will
         find it -->
    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:drawSelectorOnTop="false"/>

    <!-- Here is the view to show if the list is emtpy -->
    <TextView android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="No items."/>

</FrameLayout>

问题是我想在每个选项卡的每个视图中放置不同的布局。 我试图修改代码,使“ArrayListFragment”继承自“Fragment”而不是“ListFragment”,以加载不包含“ListView”但包含“RelativeLayout”或“LinearLayout”但无法使其工作的布局

请,如果有人可以帮助我,我需要加载选项卡上的不同视图,并且它们包含除ListView以外的其他元素


非常感谢。

您最好将每个片段制作成不同的布局。 您可以将
addFragment(Fragment Fragment)
方法添加到
MyAdapter

mAdapter = new MyAdapter(getSupportFragmentManager());
for(int i=0; i<4; i++) {
    Fragment fragment = null;
    switch(i) {
    case 0: 
        fragment = FirstFragment.newInstance();
        break;
    case 1:
        fragment = SecondFragment.newInstance();
        break;
    case 2:
        fragment = ThirdFragment.newInstance();
        break;
    case 3:
        fragment = FourthFragment.newInstance();
        break;
    }
    mAdapter.addFragment(fragment);
}
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAdapter);
FirstFragment:为每个碎片充气不同的布局

public abstract class CustomFragment extends Fragment {
    public abstract Fragment newInstance();
    public abstract String getPageTitle();
}
public class FirstFragment extends CustomFragment {

    @Override
    public Fragment newInstance() {
        Fragment f = new FirstFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        View view = inflater.inflate(R.layout.LAYOUT_ID_FOR_FIRST_FRAGMENT, container, false);

        // Some codes for layout such as findViewById

        return view;
    }

    @Override
    public String getPageTitle() {
        // return TITLE_FOR_FRAGMENT
    }
}

我希望这个答案能对您有所帮助。

通过使用ListFragment自动检测布局中的ListView。。。我必须在布局中实现什么才能使用Fragment而不是ListFragment来检测它,并且可以在每个选项卡的视图中看到它?A.谢谢你,谢谢你的帮助。我正在测试代码,但在第一个开关中调用的每个片段方法(FirstFragment,…)中都缺少“newInstance”方法。此外,FirstFragment应该是静态方法,以便在开关中调用它,而不是?我将abstract
newInstance
方法添加到
CustomFragment
。我做了最新的更改,但是我在每个片段中都有一些错误:“由于一些中间构造函数调用,没有IniSelCategory类型(类名)的封闭实例可用”。。。我已经将静态方法放在了“newInstance”方法中,然后我犯了下一个错误:“这个静态方法无法从IniSelCategoria.CustomFragment中隐藏实例方法”…请帮帮我!谢谢你。问题解决了,我不得不使用静态方法并删除任何其他内容。但现在我如何与每个选项卡的每个片段中的元素交互?我在onCreateView方法上对此进行了测试:ImageView img=(ImageView)findViewById(R.id.img1);setOnClickListener(new-ImageView.OnClickListener(){public void onClick(View v){Log.i(“片段”,“这是一个测试”);});“findViewById”中还有一个错误:“无法从SherlockFragmentActivity类型对非静态方法findViewById(int)进行静态引用”
public static class MyAdapter extends FragmentPagerAdapter {
    private List<Fragment> mFragmentList;

    public MyAdapter(FragmentManager fm) {
        super(fm);
        mFragmentList = new ArrayList<Fragment>();
    }

    publid void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        return ((CustomFragment) mFragmentList.get(position)).getPageTitle();
    }
}
public abstract class CustomFragment extends Fragment {
    public abstract Fragment newInstance();
    public abstract String getPageTitle();
}
public class FirstFragment extends CustomFragment {

    @Override
    public Fragment newInstance() {
        Fragment f = new FirstFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        View view = inflater.inflate(R.layout.LAYOUT_ID_FOR_FIRST_FRAGMENT, container, false);

        // Some codes for layout such as findViewById

        return view;
    }

    @Override
    public String getPageTitle() {
        // return TITLE_FOR_FRAGMENT
    }
}