我正在尝试创建一个使用片段添加标签的简单项目。我想在标签中添加三个片段。但是我在代码中遇到了一些错误。我的片段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>
答案 0 :(得分:0)
我不确定,但我认为是因为您针对每个片段初始化了fragment
var
。如你所说:&#34; getItem中的片段字用红色加下划线。 它表示将片段更改为片段 &#34;,这是因为getItem
方法需要返回Fragment
对象:
public Fragment getItem() { ... }
然后,当您声明并初始化var
时,您可以单独将其设置为每个片段而不返回Fragment
。实际上,当您声明此内容时,您会返回FragmentA
,FragmentB
或FragmentC
:
FragmentA fragment = new FragmentA(); // same for others
return fragment;
最好返回全球 var
,其等于FragmentA
,FragmentB
或FragmentC
。
见:
@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