-1

У меня есть MainActivity и фрагмент. То, что я хочу сделать, это передать массив из моей основной активности в мой фрагмент.Как передать ArrayList из Activity в Fragment в Android

В моем MainActivity мой код выглядит следующим образом:

private final List<RestaurantParcelableModel> restaurantList = new ArrayList<>(); 
... 
RestaurantsFragment restaurantsFragment = new RestaurantsFragment(); 
     Bundle args = new Bundle(); 
     args.putParcelableArrayList("restaurantList", (ArrayList<? extends Parcelable>) restaurantList); 
     restaurantsFragment.setArguments(args); 

     FragmentManager fragmentManager = getFragmentManager(); 
     android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.restaurants_list, restaurantsFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 

Сейчас я получаю эту ошибку в fragmentTransaction.replace (R.id.restaurants_list, restaurantsFragment); - "Неверный тип второго аргумента. Найдено: 'com.test.restaurants.sliderfragments.RestaurantsFragment', required: 'android.app.Fragment' replace (int, android.app.Fragment) в FragmentTransaction не может быть применен to (ИНТ, com.test.restaurants.sliderfragments.RestaurantsFragment) "

+0

Является ли ваш '' RestaurantsFragment' расширения Fragment' правильно? – raxelsson

+1

Также убедитесь, что 'RestaurantParcelableModel' реализует' Parcelable'. Потому что такой тип литья - '(ArrayList ) restaurantList' - это тихая опасность. –

+1

и Фрагменты с использованием import 'android.app.Fragment #' ?? – Sanoop

ответ

1

Теперь, чтобы исправить проблему, вам необходимо обработать свой импорт.

Либо использовать import android.app.Fragment вместо import android.support.v4.app.Fragment

или обновить основное содержание вашего приложения с менеджером поддержки фрагмента, как это:

FragmentManager fragmentManager = getSupportFragmentManager(). 

Но тогда вы должны изменить тип самого FragmentManager ; import android.app.FragmentManager до import android.support.v4.app.FragmentManager;

+0

@ Kemo Надеюсь, это помогло :) – Sanoop

+0

Это было :) спасибо Sanoop. Я использовал import android.app.Fragment вместо импорта android.support.v4.app.Fragment. – Kemo

+0

Я также попытался использовать getSupprotFragmentManager(), но получил эту ошибку: «Не удалось разрешить символ FragmentTransaction» в моем коде: «FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace (R.id.restaurants_list, restaurantsFragment); fragmentTransaction.addToBackStack (null); fragmentTransaction.commit(); ' – Kemo

1

Вы можете использовать Bundle отправить ArrayList:

Bundle args = new Bundle(); 
args.putStringArrayList("array", mArrayList); 
restaurantsFragment.setArguments(args); 
1

Вы должны удалить строки: import android.support.v4.app.Fragment; и изменить его для import android.app.Fragment;

1

@Kemo та же ошибка, с которой я столкнулся сейчас, я использовал менеджер поддержки фрагмента вместо диспетчера фрагментов. Теперь его рабочий тон.

 FragmentManager fragmentManager = getSupportFragmentManager(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = 
     fragmentManager.beginTransaction(); 
     BlankFragment blankFragment = new BlankFragment(); 
     fragmentTransaction.add(R.id.ll, blankFragment, ""); 
     fragmentTransaction.commit(); 
Смежные вопросы