7

He visto bastante código y no puedo resolverlo. http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.htmlFragmentPagerAdapter getItem error con ListFragment

Tiene que ser algo simple. Estoy mostrando la mayor parte del código. El error está en la próxima sección.

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) { 
} 

Aquí es donde está mi error. case 1 of getItem, Tipo no coincidente: No se puede convertir de MainActivity.HistoryFragment a Fragment. me está diciendo que cambie el tipo de devolución de método a HistoryFragment o cambie el tipo de devolución de newInstance() a Fragment. Donde no puedo hacer tampoco. Otros ejemplos que he visto son casi idénticos a mi código. Lo he intentado con y sin pasar una discusión.

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; 
    } 

Y mi HistoryFragment que se extiende ListFragment. Al final no se extraerá de los valores de String[], sino de los recursos de la base de datos. Solo quería configurar una estructura primero y verla/jugar con el diseño.

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)); 
    } 
} 

Respuesta

26

Me di cuenta después de dormir un poco. Estaba importando android.app.ListFragment en lugar de android.support.v4.app.ListFragment

+1

establece el marco del proyecto en 2.3.3 (si no necesitas elementos condicionales de 3+) para evitar este tipo de problemas – sherpya

+0

Debes marcar tu respuesta como "aceptada" si esto resolvió tu pregunta. – Luis

+0

Lo haré. Dice que tengo que esperar hasta mañana. Gracias a ambos. – user1235035

0

Creo que tendrá que hacer un yeso para fragmentar antes de volver. Así que intente esto

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

Lo he intentado y no funciona. Agregué un enlace a un ejemplo. – user1235035

Cuestiones relacionadas