gpt4 book ai didi

Android:难以在 fragment 内启动 fragment

转载 作者:行者123 更新时间:2023-11-30 01:58:52 25 4
gpt4 key购买 nike

所以,我之前问了一个问题,并得到了一些帮助,但最终,我决定我需要更加清楚。

基本上,我有一个应用程序。主要 Activity 是一个选项卡式 Activity/滑动 View 。第一页由 Main_Fragment 组成,其中包含另外两个 fragment (A 和 B)。 fragment A 包含一个按钮,我试图在按下时按下该按钮,它将启动一个不同的 fragment 以位于 fragment A 和 B 之上,替换它们或 Main_fragment。

我遇到困难的地方是我需要为 fragment 事务使用什么代码。以前我使用这段代码,当 Main_Fragment 只是一个 Activity 时,它运行良好,但现在我不确定我需要做什么。

    FragmentManager fm = getFragmentManager();
fragment = new DayViewFragment();

FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack(null);
ft.add(android.R.id.content, fragment);
ft.commit();

首先,我认为我需要以某种方式使用 getParentFragment(),但我不确定如何使用,其次,我不确定用什么替换 android.R.id.content,尤其是当代码位于 fragment 内时一个 fragment 。

如果需要任何说明,请询问。感谢您的帮助!

最佳答案

我认为实现此类功能的最佳方式是使用从 Fragment 到 Activity 的接口(interface)回调。

如果勾选“Include interface callbacks?”,Android Studio 1.2.2 甚至会自动创建接口(interface)回调代码。创建新 fragment 时的复选框。

这是 fragment 的一般代码结构:

public class MainActivityFragment extends Fragment {

private OnMainFragmentInteractionListener mListener;
private Button exampleButton;

public MainActivityFragment() {
}

public static MainActivityFragment newInstance() {
MainActivityFragment fragment = new MainActivityFragment();
return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container, false);

exampleButton = (Button) rootView.findViewById(R.id.button);

exampleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.buttonClicked("test value");
}
});

return rootView;
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnMainFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnMainFragmentInteractionListener");
}
}

public interface OnMainFragmentInteractionListener {
void buttonClicked(String val);
}
}

然后Activity会实现接口(interface):

public class MainActivity extends FragmentActivity
implements MainActivityFragment.OnMainFragmentInteractionListener {

并实现接口(interface)方法:

@Override
public void buttonClicked(String val) {

FragmentManager fm = getFragmentManager();
fragment = new DayViewFragment();

FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack(null);
ft.add(android.R.id.content, fragment);
ft.commit();

}

关于Android:难以在 fragment 内启动 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798340/

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