Как передать ArrayList <Fragment>? - PullRequest
0 голосов
/ 13 ноября 2018

Чтобы избежать создания нескольких действий, у меня есть одна Activity2 , в которой есть этот код, который позволяет мне просто передавать массив фрагментов из любой активности, которую я хочу.

privateArrayList<Fragment> fragArrayList;

fragArrayList = intent.getParcelableArrayListExtra("fragArrayList");

Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          setFragment(fragArrayList.get(i));
        }
    });

private void setFragment(Fragment fragment) {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction()
            .replace(R.id.layout, fragment)
            .addToBackStack(null)
            .commit();
}

В Activity1 У меня есть этот код (который я знаю, не работает)

Wrong 2nd argument type. Found: 'java.util.ArrayList<android.support.v4.app.Fragment>', required: 'java.util.ArrayList<? extends android.os.Parcelable>'

.

Intent intent= new Intent(Activity1.this, Activity2.class);

ArrayList<Fragment> fragArrayList = new ArrayList<>();
                fragArrayList.add(new frag1());
                fragArrayList.add(new frag2());
                fragArrayList.add(new frag3());
                fragArrayList.add(new frag4());
                fragArrayList.add(new frag5());

                intent.putParcelableArrayListExtra("fragArrayList"), fragArrayList);

Смысл в том, чтобы fragArrayList перемещался из any Activity в Activity2 . А так как фраги внутри fragArrayList будут отличаться в зависимости от активности, из которой они исходят, я не могу просто добавить их в ArrayList внутри Activity2 .

И поскольку будет несколько действий, неэффективно создавать логику внутри Activity2 для обработки из каждого действия, из которого пришел пользователь.

Как я могу передать ArrayList из Activity1 в Activity2?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Это плохая схема передачи списка фрагментированных объектов, и вы можете передавать только массив объектов класса Parcelable.

0 голосов
/ 14 ноября 2018

Успех Спасибо: Грегу Моенсу & gicci за понимание

Деятельность1

Intent intent= new Intent(Activity1.this, Activity2.class);

ArrayList<String> fragArrayList= new ArrayList<>();

fragArrayList.add(String.valueOf(frag1.class.getName()));
fragArrayList.add(String.valueOf(frag2.class.getName()));
fragArrayList.add(String.valueOf(frag3.class.getName()));
fragArrayList.add(String.valueOf(frag4.class.getName()));
fragArrayList.add(String.valueOf(frag5.class.getName()));

intent.putExtra("fragArrayList"), fragArrayList);

Деятельность2

ArrayList<String> fragArrayList = new ArrayList<>();

fragArrayList = intent.getStringArrayListExtra("fragArrayList");

Button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      setFragment(fragArrayList.get(i));
    }
});

 private void setFragment(String fragClass) {

    Fragment fragment = Fragment.instantiate(this, fragClass);

    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction()
            .replace(R.id.layout, fragment)
            .addToBackStack(null)
            .commit();
}
0 голосов
/ 13 ноября 2018

Фрагменты не подлежат передаче, поэтому вы не сможете передавать их намеренно. Вы можете передать полностью определенное имя класса фрагмента через намерение, а затем создать экземпляр фрагмента (ов) в Activity2 посредством отражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...