0

Я использую viewpager и создаю фрагменты, и я хочу передать arraylist. Так что я попытался следующие вещи:Как передать пользовательский объект arraylist из действия в фрагмент с экземпляром

MainActivity:

private ArrayList<customers> mArrayList = null; 

    ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this.getSupportFragmentManager()); 

    adapter.addFrag(NewCustomer.newInstance(mArrayList), "NewCustomer"); 

Теперь в классе фрагмента я создаю экземпляр:

public static final ArrayList<customers> data = new ArrayList<customers>(); 

public static final NewCustomer newInstance(ArrayList<customers> mArrayList) { 

     NewCustomer f = new NewCustomer(); 
     Bundle bdl = new Bundle(1); 
     bdl.putParcelableArrayList(data, mArrayList); 
     f.setArguments(bdl); 
     return f; 
    } 

Но это не работает. Он показывает ошибку на bdl.putParcelableArrayList. Я хочу получить arraylist и сохранить в локальном arraylist этого класса.

Как я могу получить arraylist с моим обычным объектом?

ответ

1

Можете ли вы попробовать?

public static final NewCustomer newInstance(ArrayList<customers> mArrayList) { 

     NewCustomer f = new NewCustomer(); 
     Bundle bdl = new Bundle(1); 
     this.data = mArrayList; // assign its Value 
     bdl.putParcelableArrayList(data, mArrayList); 
     f.setArguments(bdl); 
     return f; 
    } 

this.data = mArrayList будет присвоить значение текущей переменной-члена фрагмента. Теперь мы можем получить доступ к текущему фрагменту.

+0

Вы должны объясните, почему код, который вы предоставляете, работает и что он делает. Если вы предоставляете просто код, это не поможет OP и следующим пользователям, которые могут получить аналогичный вопрос. – AxelH

+0

@AxelH, да, вы правы, я извиняюсь за это. –

+0

Не извиняйтесь;) Но как вы объясняете использование 'this' в статическом контексте? Я действительно не понимаю эту часть. Или неправильное использование метода;) – AxelH

1

проверьте, что ваш модельный класс «NewCustomer» реализует Parcelable.

4

Первый параметр, который вы проходите неправильно. Проверьте определение:

putParcelableArrayList(String key, ArrayList<? extends Parcelable> value) 

Определить ключ следующим образом в вашем фрагменте:

public static final String KEY; 

Чтобы получить ArrayList в качестве локальной переменной в вашем использовании фрагмента следующий код:

@Override 
public void onStart() { 
    super.onStart(); 
    Bundle arguments = getArguments(); 
    ArrayList<customers> customer_list = arguments.getParcelable(KEY); 
} 
+0

Это хорошо написано. Вы можете добавить [источник] (https://developer.android.com/reference/android/os/Bundle.html), а также показать, как вызвать putParcelable с помощью KEY (который вам нужно инициализировать, поскольку это константа) – AxelH