FragmentPagerAdapter getItem error with ListFragment

I looked through quite a lot of code and can't figure it out. http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

It should be something simple. I show most of the code. The error is given 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) { } 

That is where my mistake is. case 1 of getItem , Type Mismatch: Unable to convert from MainActivity.HistoryFragment to Fragment. he tells me to either change the return type of the method to HistoryFragment , or change the return type of newInstance() to a fragment. Where I can't either. Other examples that I saw are almost identical to my code. I tried with and without 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 , which extends ListFragment . As a result, it will not be drawn from String[] values, but from database resources. I just wanted to set up the 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)); } } 
+7
source share
2 answers

I realized this after sleep. I imported android.app.ListFragment instead of android.support.v4.app.ListFragment

+26
source

I think you will need to come up with a snippet before returning. So try this

 Fragment history = HistoryFragment.newInstance(i); return history; 
0
source

All Articles