在setArguments之后调用onCreateView时?

时间:2019-05-30 09:56:14

标签: java android fragment

有一个问题。

因此,在我的adpater课堂上,我在下面执行代码。

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

所以我创建了DrinkFragment的一个实例。
要在onCreateView(~~~)处DrinkFragment.java中执行getArguments(),必须在 fragment3.setArgument(bundle3)之后对onCreateView(~~~)执行吗?

所以我不认为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;
    }
}

这是存在onCreateView()的fragment.java。


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;

        }
    }
}```

1 个答案:

答案 0 :(得分:1)

很抱歉,如果我的代码不是Java的,但是我在kotlin中传递参数的方法是先使oncreateview返回视图,然后将函数调用给onviewcreated,以便一旦创建视图后便会执行。这是Kotlin中的代码:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
                    val menufragment: Fragment = AddDevice3()
                    val args = Bundle()
                    args.putString("str1", ssid) //ssid and pass is a string
                    args.putString("str2", pass)
                menufragment.arguments = args
                    val fr = fragmentManager?.beginTransaction()
                    fr?.replace(R.id.content_frame, menufragment)
                    fr?.addToBackStack(null)
                    fr?.commit()
}
相关问题