FragmentPagerAdapter的getItem误差ListFragment [英] FragmentPagerAdapter getItem error with ListFragment
问题描述
我已经看了相当多的code并不能想出解决办法。 <一href="http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html">http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
它是简单的东西。 我展示的大部分code。误差在下一节。
公共类MainActivity扩展FragmentActivity工具
ActionBar.TabListener {
公共静态最终诠释TAB_COUNT = 3;
公共静态InputMethodManager inputManager;
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
mSectionsPagerAdapter =新SectionsPagerAdapter(
getSupportFragmentManager());
//设置操作栏。
最后的动作条动作条= getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager =(ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
//当不同部分之间的刷卡,选择相应的
//标签。
mViewPager
.setOnPageChangeListener(新ViewPager.SimpleOnPageChangeListener(){
@覆盖
公共无效onPageSelected(INT位置){
actionBar.setSelectedNavigationItem(位置);
}
});
//对于每个应用程序的章节中,添加一个标签,操作栏。
的for(int i = 0; I&LT; mSectionsPagerAdapter.getCount();我++){
actionBar.addTab(actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(I))
.setTabListener(本));
}
//为了控制键盘的弹出
inputManager =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
。getMenuInflater()膨胀(R.menu.menu_main,菜单);
返回true;
}
@覆盖
公共无效onTabUnselected(ActionBar.Tab选项卡,
FragmentTransaction fragmentTransaction){
}
@覆盖
公共无效onTabSelected(ActionBar.Tab选项卡,
FragmentTransaction fragmentTransaction){
//当选择给定的标签,切换到对应页面
//该ViewPager。
mViewPager.setCurrentItem(tab.getPosition());
}
@覆盖
公共无效onTabReselected(ActionBar.Tab选项卡,
FragmentTransaction fragmentTransaction){
}
这是我的错误。
案例的getItem
,类型不匹配的1:无法转换MainActivity.HistoryFragment到碎片。它告诉我,要么改变方法的返回类型为 HistoryFragment
或更改的newInstance()
的返回类型片段。在那里我都做不到。我见过的其他例子看上去几乎等同于我的code。我曾尝试使用和不传递一个参数。
公共类SectionsPagerAdapter扩展FragmentPagerAdapter {
公共SectionsPagerAdapter(FragmentManager FM){
超(FM);
}
@覆盖
公共片段的getItem(int i)以{
开关(ⅰ){
情况下0:
片段tipCalc =新TipCalcFragment();
返回tipCalc;
情况1:
//片段记录=新HistoryFragment();
返回HistoryFragment.newInstance(ⅰ); //错误这里
案例2:
片段统计=新StatsFragment();
返回统计信息;
}
返回null;
}
和我的 HistoryFragment
扩展 ListFragment
。最终也不会被揪从的String []
值,但是从数据库资源。我只是想建立一个结构,第一,要看/播放的布局。
公共静态类HistoryFragment扩展ListFragment {
//公共HistoryFragment(){
//}
的String []值=新的String [] {...};
静态HistoryFragment的newInstance(INT NUM){
HistoryFragment历史=新HistoryFragment();
捆绑的args =新包();
args.putInt(民,NUM);
history.setArguments(参数);
回到历史;
}
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
查看查看= inflater.inflate(R.layout.history,集装箱,假);
返回查看;
}
@覆盖
公共无效onActivityCreated(包savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(新ArrayAdapter&LT;字符串&GT;(getActivity()
android.R.layout.simple_list_item_1,android.R.id.text1,
值));
}
}
我想它得到一些睡眠后出来。我进口android.app.ListFragment代替android.support.v4.app.ListFragment
I've looked at quite a lot of code and can't figure this out. http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
It has to be something simple. I'm showing most of the code. The error is in the next section.
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener {
public static final int TAB_COUNT = 3;
public static InputMethodManager inputManager;
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
// When swiping between different sections, select the corresponding
// tab.
mViewPager
.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
// To control keyboard pop-up
inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in
// the ViewPager.
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
This is where my error is.
case 1 of getItem
, Type mismatch: Cannot convert from MainActivity.HistoryFragment to Fragment. it is telling me to either change method return type to HistoryFragment
or change return type of newInstance()
to Fragment. Where I can't do either. Other examples I've seen look almost identical to my code. I have tried with and without passing an argument.
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
Fragment tipCalc = new TipCalcFragment();
return tipCalc;
case 1:
// Fragment history = new HistoryFragment();
return HistoryFragment.newInstance(i); //ERROR HERE
case 2:
Fragment stats = new StatsFragment();
return stats;
}
return null;
}
And my HistoryFragment
that extends ListFragment
. In the end it won't be pulling from the String[]
values but from database resources. I just wanted to setup a structure first and see it/play with the layout.
public static class HistoryFragment extends ListFragment {
// public HistoryFragment() {
// }
String[] values = new String[] { ... };
static HistoryFragment newInstance(int num) {
HistoryFragment history = new HistoryFragment();
Bundle args = new Bundle();
args.putInt("num", num);
history.setArguments(args);
return history;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.history, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1,
values));
}
}
I figured it out after getting some sleep. I was importing android.app.ListFragment instead of android.support.v4.app.ListFragment
这篇关于FragmentPagerAdapter的getItem误差ListFragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!