使用片段添加选项卡

时间:2014-05-21 20:34:45

标签: android android-fragments android-tabs

我正在尝试创建一个使用片段添加标签的简单项目。我想在标签中添加三个片段。但是我在代码中遇到了一些错误。我的片段getItem方法显示了一些错误。我不知道如何纠正它们。我的MainActivity代码是:

    package com.example.tabs;



    public class MainActivity extends android.support.v4.app.FragmentActivity {
    ViewPager viewpager=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    viewpager = (ViewPager) findViewById(R.id.pager);
    FragmentManager manager = getSupportFragmentManager();
    viewpager.setAdapter(new MyAdapter(manager));
    FragmentA fragA = new FragmentA();
    FragmentB fragB = new FragmentB();
    FragmentC fragC = new FragmentC();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

    class MyAdapter extends FragmentPagerAdapter{

    public MyAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }



    @Override
    public Fragment getItem(int a) {
        if (a == 0){
            FragmentA fragment = new FragmentA();
        }
        if (a == 1){
            FragmentB fragment = new FragmentB();
        }
        if (a == 2){
            FragmentC fragment = new FragmentC();
        }
        return fragment;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3;
    }

    }

    }

这个XML文件是:

<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v4.view.ViewPager>

2 个答案:

答案 0 :(得分:0)

我不确定,但我认为是因为您针对每个片段初始化了fragment var。如你所说:&#34; getItem中的片段字用红色加下划线。 它表示将片段更改为片段 &#34;,这是因为getItem方法需要返回Fragment对象:

public Fragment getItem() { ... } 

然后,当您声明并初始化var时,您可以单独将其设置为每个片段而不返回Fragment。实际上,当您声明此内容时,您会返回FragmentAFragmentBFragmentC

FragmentA fragment = new FragmentA(); // same for others
return fragment;

最好返回全球 var,其等于FragmentAFragmentBFragmentC

见:

@Override
public Fragment getItem(int a) {
    // declare Fragment var
    Fragment fragment = null;
    switch (a){
        case 0:
            // use and init this var
            fragment = new FragmentA();
            break;
        case 1:
            fragment = new FragmentB();
            break;
        case 2:
            fragment = new FragmentC();
            break;
    }
    // return it
    return fragment;
}  

BTW,我将if/else条件更改为switch,无论如何都与if/else无差异。

您也可以避免使用var并直接返回相关片段,如下所示:

@Override
public Fragment getItem(int a) {
    switch (a){
        case 0:
            // return the related fragment
            return new FragmentA();
            break;
        case 1:
            return new FragmentB();
            break;
        case 2:
            return new FragmentC();
            break;
    }
}  

答案 1 :(得分:0)

看起来你有两个不同的片段

导入
  

用于导入的片段活动

android.support.v4.app.FragmentActivity

和您正在使用的片段

android.app. fragment

你只能在课堂上使用一种导入

  

使用support.V4 import或android.app.fragment import