在 setArguments 之后调用 onCreateView 时?
When onCreateView is called after setArguments?
有一个问题。
所以在我的适配器 class 中,我执行下面的代码。
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;
}
}
这是 fragment.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;
}
}
}```
抱歉,如果我的代码不在 Java 中,但我在 kotlin 中传递参数时所做的是先将 oncreateview 设置为 return 视图,然后调用 onviewcreated 函数,这样它将执行一次视图已创建。这是 Kotlin 中的代码:
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()
}
有一个问题。
所以在我的适配器 class 中,我执行下面的代码。
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;
}
}
这是 fragment.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;
}
}
}```
抱歉,如果我的代码不在 Java 中,但我在 kotlin 中传递参数时所做的是先将 oncreateview 设置为 return 视图,然后调用 onviewcreated 函数,这样它将执行一次视图已创建。这是 Kotlin 中的代码:
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()
}