当前位置: 首页 > 知识库问答 >
问题:

在接口方法内部调用的方法返回null

柴岳
2023-03-14

我创建了一个接口,以便可以在对话和片段之间进行通信。

目标:当用户从对话框中选择任何内容时,应将其显示在文本视图中。

在这个界面中,我创建了一个界面方法,在主活动中调用,并传递用户在对话框中选择的值。与用户选择的值一起,在我的片段中,我创建了一个方法,将文本视图设置为该值。然而,每当我调用该方法时,它总是返回null。

我对日志进行了大量测试,发现通过我的方法传递的值不是空的,一切似乎都按照我想要的方式工作,这很奇怪。更让我困惑的是,这个方法甚至没有运行,它在执行内部代码之前立即返回null,这对我来说非常奇怪。

对话框代码:

    public String users_time;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final String time_options[] = {"10", "20", "30", "40", "50", "60", "70", "80", "90"}; // Since we know how many options there are in the array we use an array instead of an arraylist

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setTitle("Choose the time");
        builder.setSingleChoiceItems(time_options, -1, new DialogInterface.OnClickListener() { // check items = what index is auto selected in the dialog, use -1 bc you dont want that
            @Override
            public void onClick(DialogInterface dialog, int which) { // which = Index in the array
                CharSequence time = time_options[which];
                Log.i("this" ,"LOG 1 dialogsTime retusn" + time);
                listener.onDialogInput(time);

                users_time = time_options[which];

                int usersTime = Integer.valueOf(users_time);
                listener.grabTime(usersTime);

            }
        });
        builder.setPositiveButton("Set Time", new DialogInterface.OnClickListener() { // positive = Ok or continue
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { // Negative = Cancel or stop
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });


        return builder.create(); // always return this at the end
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof  DiaglogListener) {
            listener = (DiaglogListener) context;
        }
        else {
            throw new RuntimeException(context.toString()
                    + " must implement DiaglogListener");
        }
    }
    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }
}

主要活动界面方法:

@Override
public void onDialogInput(CharSequence dialogsTime) {
    Fragment1_timer frag1 = new Fragment1_timer();

    Log.i("this" ,"LOG 2 runs successfully");

    try {
        frag1.setDialogTime(dialogsTime);
    } catch (Exception e){
        Toast.makeText(this, "Null error :/", Toast.LENGTH_SHORT).show();
    }
}

片段方法:

public void setDialogTime(CharSequence time){ 
    Log.i("this" ,"LOG 3 ran successfully");
    text_view_time.setText(time + ":00");
}

共有1个答案

鲁熙云
2023-03-14

您不能将onAttach方法用于片段到DialogFragment的通信。您必须使用“setTargetFragment”

你可以参考这个答案。https://stackoverflow.com/a/32323822/9792247

 类似资料:
  • 我想有一个方法公共布尔verfySignIn()并在里面调用下面的方法并返回true, setUserName(String)此方法用于设置用户名。setPassword(字符串)此方法用于设置密码。clickLogin()此方法用于单击login按钮。 这是我的代码现在的样子,

  • 我有一个方法,我需要写单元测试用例。该方法返回类型。

  • 问题内容: 有没有一种方法可以等待诺言,以便您可以从中获得实际结果并返回,而不是返回诺言本身?我在考虑类似于C#await关键字与Tasks一起工作的方式。 这是为什么我想拥有像canAccess()这样的方法的示例,该方法返回true或false而不是promise,以便可以在if语句中使用它。方法canAccess()将使用$ http或$ resource进行AJAX调用,然后以某种方式等待

  • 我有一个定义一些函数的接口IFoo,一个实现IFoo和一些内部函数的抽象类FooBase,还有几个从FooBase派生的类Foo。 我还有一个类Bar,它应该从FooBase调用一个方法,但是它的参数作为IFoo传递。所以所有的东西都是这样的: 如前所述,这感觉不对,因为任何人都可能会出现,编写一个实现IFoo的类Baz并用它调用DoSomething将会失败。 我还发现了这个问题/解决了一个类似

  • 问题内容: Java-8允许在接口内部定义静态方法,但仅通过接口名称限制其调用: 9.4:接口可以声明静态方法,这些方法在不引用特定对象的情况下被调用。 例如: 导致错误: 在JLS中,这种禁令经常有一种解释。在这种情况下,我没有发现任何详细信息。因此,我正在寻找对此规则的全面或权威的解释:为什么禁止通过特定的对象引用调用静态方法?它有什么坏处? 问题答案: 相当强烈的共识是,有关类的静态方法也不

  • 我有一个接口 创建 有两种方法,一种是异步的,一种是同步的。我想为这两个方法中的每一个提供一个接口实现。 对于异步方法,其实现可能如下所示: 但是我应该如何实现使用同步方法创建 的类 呢? 我可以实现方法以同步运行: 然后,编译器将警告不要在方法签名中使用 : 此异步方法缺少'await'运算符,将同步运行。考虑使用'await'运算符等待非阻塞API调用,或'await task.run(...