Когда onCreateView вызывается после setArguments?

Есть один вопрос.

Итак, в моем классе adpater я выполняю приведенные ниже коды.

DrinkFragment fragment3 = new DrinkFragment();
Bundle bundle3 = new Bundle();
bundle3.putInt("type",2);
fragment3.setArguments(bundle3);
return fragment3;

Поэтому я делаю экземпляр DrinkFragment.
Чтобы выполнить getArguments () в DrinkFragment.java в onCreateView (~~~), onCreateView (~~~) должен быть выполнен после фрагмент3.setArgument(bundle3), верно?

Поэтому я не думаю, что onCreateView(~~) выполняется в тот момент, когда я создаю экземпляр DrinkFragment. Тогда когда он казнен?

Заранее спасибо. ;)

это мой PagerAdapter.java, где я создаю экземпляр Fragment.

package com.junga.project1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.Log;

public class PagerAdapter extends FragmentStatePagerAdapter {

    int numOfFragment;
    private static final String TAG = "PagerAdapter";

    public PagerAdapter(FragmentManager fm,int numOfFragment) {
        super(fm);
        this.numOfFragment = numOfFragment;
    }

    @Override
    public Fragment getItem(int i) {

        switch(i){
            case 0:
                DrinkFragment fragment1 = new DrinkFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("type",0);
                fragment1.setArguments(bundle);
                Log.d(TAG, "getItem: 0 ");
                Log.d(TAG, "Set the argument fragment1");
                return fragment1;
            case 1:
                DrinkFragment fragment2 = new DrinkFragment();
                Bundle bundle2 = new Bundle();
                bundle2.putInt("type",1);
                fragment2.setArguments(bundle2);
                Log.d(TAG, "Set the argument fragment2");
                Log.d(TAG, "getItem: 1");
                return fragment2;

            case 2:
                DrinkFragment fragment3 = new DrinkFragment();
                Bundle bundle3 = new Bundle();
                bundle3.putInt("type",2);
                fragment3.setArguments(bundle3);
                Log.d(TAG, "getItem: 2");
                Log.d(TAG, "getItem: Set the argument fragment3");
                return fragment3;

            default:
                return null;
        }


    }

    @Override
    public int getCount() {
        return numOfFragment;
    }
}

Это фрагмент.java, где существует onCreateView().


import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class DrinkFragment extends Fragment {

    private static final String TAG = "DrinkFragment";
    int fragmentType;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView: Created");
        Bundle bundle = this.getArguments();


        fragmentType = bundle.getInt("type",0);
        Log.d(TAG, "Got the bundle type : "+fragmentType);
        View view =  inflater.inflate(R.layout.fragment_drink,container,false);
        ImageView image = (ImageView) view.findViewById(R.id.image);

        switch(fragmentType){
            case 0 :
                image.setImageResource(R.drawable.fragment_soju);
                return view;
            case 1:
                image.setImageResource(R.drawable.fragment_makgeoli);
                return view;
            case 2:
                image.setImageResource(R.drawable.fragment_cheongju);
                return view;
            default:
                return view;

        }
    }
}```

вызов setArguments() в onCreate() фрагмента - но независимо, что говорят логи о полученном аргументе type?

Shark 30.05.2019 11:59

Жизненный цикл фрагмента начнется после его присоединения к контейнеру. Вы установили этот адаптер пейджера на ViewPager?

ADM 30.05.2019 12:03

@Shark хорошо, насчет аргумента типа? ну, я не распечатывал лог type, но бандл работает нормально.

JoyfulJoyce 30.05.2019 12:52

@ADM Да, я установил для этого pagerAdapter значение ViewPager в своей MainActivity, и он отлично работает. Я спросил это из любопытства, а не потому, что это не работает. Можете ли вы дать мне более подробную информацию о жизненном цикле фрагмента, который начнется после его подключения к контейнеру?

JoyfulJoyce 30.05.2019 12:54

Вы спрашиваете о 3-м случае, не так ли? Для fragment3 .. Если да: - OffsetLimit по умолчанию для пейджера изначально равен 2 (одна страница с каждой стороны), поэтому сначала он будет вызываться только для первых двух позиций. после того, как вы пролистнете страницу вправо, она будет вызвана для третьего форейтора. См. #setOffscreenPageLimit() и Эта тема.

ADM 30.05.2019 13:00

@ADM Прежде всего, спасибо, что ответили мне :) То, что я хотел спросить, было не о фрагменте 3. Мне было интересно, когда именно начинается жизненный цикл фрагмента. Начинается ли это, когда создается экземпляр фрагмента момента? Или когда он прикреплен к контейнеру? Поскольку я проверил ваш ответ, адаптер прикрепляет 2 фрагмента за раз. И в этот момент (когда апдатер прикрепляет 2 фрагмента) начинается жизненный цикл фрагмента? Я правильно понимаю?

JoyfulJoyce 30.05.2019 13:06

Да, это так ..

ADM 30.05.2019 13:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Извините, если мой код не на Java, но то, что я сделал для передачи аргументов в kotlin, заключалось в том, чтобы заставить oncreateview сначала возвращать представление, а затем вызывать функцию onviewcreated, чтобы она выполнялась после создания представления. Вот код на Котлине:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
                    val menufragment: Fragment = YourFragment()
                    val args = Bundle()
                    args.putString("str1", text) //text and text1 are strings
                    args.putString("str2", text1)
                menufragment.arguments = args
                    val fr = fragmentManager?.beginTransaction()
                    fr?.replace(R.id.content_frame, menufragment)
                    fr?.addToBackStack(null)
                    fr?.commit()
}

Даже не в этом был смысл моего вопроса, спасибо, что поделились и потратили свое драгоценное время на мой вопрос!! Хорошего дня! @TechMaxed

JoyfulJoyce 30.05.2019 13:11

Спасибо :) Надеюсь, это поможет вам в будущем, если вы когда-нибудь столкнетесь с этой проблемой.

Uni 30.05.2019 13:32

Другие вопросы по теме