gpt4 book ai didi

java - Activity 中的转换界面

转载 作者:搜寻专家 更新时间:2023-11-01 07:45:23 25 4
gpt4 key购买 nike

问题是,在这之前,我在Activity中实现了interfaces,在Fragment中设置了方法的值。即在onAttach()中初始化,然后在调用interface方法的地方调用。示例:

interface OnNumberChangeCallback{
void onSuccess();
}

fragment 中:

OnNumberChangeCallback onNumberChangeCallback;

onAttach(Context context){
onNumberChangeCallback = (OnNumberChangeCallback) context;
}

等等

我想初始化 BaseActivity 中的 interface。并在Fragment中实现这个接口(interface)。当我尝试以这种方式在 onCreate 方法中进行初始化时:

onNumberChangeCallback = (OnNumberChangeCallback) this;

我得到错误:

BaseActivity cannot be cast to OnNumberChangeCallback

问题:如何正确初始化Activity中的interface

最佳答案

听起来您希望Fragment 实现接口(interface),并让Activity 以某种方式存储对它的引用。

你的界面:

interface OnNumberChangeCallback {
void onSuccess();
}

在你的 fragment 中实现它:

public class MyFragment extends Fragment implements OnNumberChangeCallback {

@Override
public void onSuccess() {
// TODO
}

// other fragment methods, like onCreateView() etc
}

并将监听器保存在您的 Activity 中:

public class MyActivity extends AppCompatActivity {

private OnNumberChangeCallback callback;

@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);

if (fragment instanceof OnNumberChangeCallback) {
callback = (OnNumberChangeCallback) fragment;
}
}

// other activity methods, like onCreate() etc
}

然后,要使用回调,您可以在 Activity 中的任何位置编写如下内容:

public void onButtonClick() {
if (callback != null) {
callback.onSuccess();
}
}

这个解决方案的根源是 FragmentActivity(它是 AppCompatActivity 的父类(super class))有一个名为 any 的方法 onAttachFragment() fragment 附加到您的 Activity 的时间。与使用 onAttach()Context 转换为 fragment 内的接口(interface)一样,您可以将 Fragment 转换为接口(interface)使用 onAttachFragment()

文档:https://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#onAttachFragment(android.support.v4.app.Fragment)

PS:这个答案提供了一个非常通用的解决方案,并且该解决方案几乎适用于您将 Fragment 添加到 Activity 的任何方式。但是,如果您知道将以特定方式添加 Fragment,您可能会做一些比实现 onAttachFragment() 更简单的事情...您可以将将其添加到 Activity 中时进行分段,如下所示:

    MyFragment fragment = new MyFragment();
callback = fragment;

getSupportFragmentManager()
.beginTransaction()
.add(R.id.content, fragment, "fragmentTag")
.commit();

关于java - Activity 中的转换界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45602139/

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