FragmentPagerAdapter的getItem误差ListFragment [英] FragmentPagerAdapter getItem error with ListFragment

查看:139
本文介绍了FragmentPagerAdapter的getItem误差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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆