Могу ли я использовать ListFragment с навигационным ящиком?

Я работаю над приложением для Android и хочу создать ListFragment и использовать его в навигационном ящике как фрагмент. Это возможно?

Я делаю ListFragment, но у меня есть ошибки в моей основной деятельности:

private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    ListFragment lf=null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;
    case 1:
        fragment = new FindPeopleFragment();
        break;
    case 2:
        fragment = new PhotosFragment();
        break;
    case 3:
        lf = new CommunityFragment();
        break;
    case 4:
        fragment = new PagesFragment();
        break;
    case 5:
        fragment = new WhatsHotFragment();
        break;

    default:
        break;
    }
    if (lf != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, lf).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

Ошибка: метод replace(int,Fragment) в типе FragmentFransaction неприменим для аргументов (int,ListFragment).

Эта ошибка находится в этой строке кода (при замене):

if (lf != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, lf).commit();

где lf — фрагмент списка.

Могу ли я использовать ListFragment с Navigation Drawer?


person user3481497    schedule 01.04.2014    source источник
comment
Можете ли вы опубликовать импорт для ListFragment?   -  person Raghunandan    schedule 02.04.2014
comment
для ListFragment я импортирую: android.support.v4.app.ListFragment;   -  person user3481497    schedule 02.04.2014
comment
Вам нужно использовать import android.app.ListFragment, потому что, вероятно, вы расширяете Activity и используете getFragmentManager(). Я мог бы ответить при условии, но я ждал вашего ответа, который пришел сейчас   -  person Raghunandan    schedule 02.04.2014
comment
Я расширяю FragmentActivity. Я думаю, проблема в том, что в навигационном ящике я тоже хочу использовать ListFragment и Fragment...   -  person user3481497    schedule 02.04.2014
comment
если я использую getSupportFragmentManager() для ListFragment, он работает, но для фрагмента нет....   -  person user3481497    schedule 02.04.2014
comment
Фрагмент же тут ни при чем. ListFragment будет работать нормально   -  person Raghunandan    schedule 02.04.2014
comment
Я решил ошибку. большое спасибо!   -  person user3481497    schedule 02.04.2014


Ответы (1)


Вы используете ListFragment из android.support.v4.app.ListFragment. Если вы действительно хотите использовать пакет поддержки, ваш Activity должен расширять FragmentActivity, а затем вы должны вызывать getSupportFragmentManager() вместо getFragmentManager(). В противном случае используйте android.app.ListFragment. Итак, вероятно, вы должны заменить это:

import android.support.v4.app.ListFragment;

с этим:

import android.app.ListFragment;
person nikis    schedule 01.04.2014
comment
Я решаю это с помощью getSupportFragmentManager() и импорта android.support.v4.app.ListFragment. Но появилась другая ошибка. В навигационном ящике я хочу использовать listFragment и Fragment. Теперь ошибка во фрагменте: 'код' if (fragment!= null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, фрагмент).commit(); - person user3481497; 02.04.2014