gpt4 book ai didi

java - fragment 上的 fragment 中的 getArgs() 为 null

转载 作者:行者123 更新时间:2023-12-01 11:08:46 24 4
gpt4 key购买 nike

我希望在滑动选项卡 fragment 上有一个信息 fragment ,并且能够在创建信息 fragment 时将一些参数传递给信息 fragment 。我已将(希望全部)相关代码放在下面:

InfoFragment.java:

public class InfoFragment extends Fragment
{
private static final String HEADER_ARG = "HEADER";
private String header;

/**
* Use this factory method to create a new instance of this fragment using the provided parameters.
*/
public static InfoFragment newInstance(String header)
{
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putString(HEADER_ARG, header);
fragment.setArguments(args);
return fragment;
}

/**
* Required empty public constructor
*/
public InfoFragment() {}

/**
* Gets the args out of the bundle
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (getArguments() != null)
{
this.header = getArguments().getString(HEADER_ARG);
}
else
{
Log.e("Frag", "Args = null");
}
}

// Rest of Fragment...
}

TabFragment.java:

public class TabFragment extends Fragment
{
/**
* Mandatory empty constructor for the fragment manager to instantiate the fragment (e.g. upon screen orientation changes).
*/
public TabFragment() {}

/**
* Create the Inventories tab view
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.tab_2, container, false);
return view;
}

/**
* Dynamically add fragments
*/
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);

InfoFragment infoFrag = InfoFragment.newInstance("MyHeader");
FragmentManager fm = getChildFragmentManager();
fm.beginTransaction().add(R.id.info_fragment, infoFrag);
}

// Rest of TabFragment...
}

tab_fragment.xml:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<fragment
android:id="@+id/character_item_fragment_1"
android:name="lomax.mycharacter3.InfoFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>

控制台日志显示 getArgs() = null,我不知道为什么。有什么想法吗?

最佳答案

因为您使用的是 fragment 标记,所以您的 fragment 将使用空构造函数实例化,而且您忘记在事务结束时调用提交,这就是为什么您没有收到有关缺少 id 的 View 的异常。

修复版本:tab_fragment.xml:

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

代码:

InfoFragment infoFrag = InfoFragment.newInstance("MyHeader");
FragmentManager fm = getChildFragmentManager();
fm.beginTransaction().add(R.id.info_fragment, infoFrag).commit();

关于java - fragment 上的 fragment 中的 getArgs() 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com