Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java类调用活动方法_Java_Android_Android Activity - Fatal编程技术网

从java类调用活动方法

从java类调用活动方法,java,android,android-activity,Java,Android,Android Activity,我想知道是否有人能帮我解决我的问题,那就是我在java类中有一个自定义对话框。此自定义对话框有一个按钮,按下该按钮时将从我的活动类调用一个方法。当我运行代码时,什么都没有发生,似乎从来没有调用过该方法,也没有给出错误,我这样做的原因是因为java类被用于overlayitems。下面是我拥有的代码片段,为任何对这个问题有见解的人干杯 overlayitem的Java类 public boolean onTap(int index) { OverlayItem item = map

我想知道是否有人能帮我解决我的问题,那就是我在java类中有一个自定义对话框。此自定义对话框有一个按钮,按下该按钮时将从我的活动类调用一个方法。当我运行代码时,什么都没有发生,似乎从来没有调用过该方法,也没有给出错误,我这样做的原因是因为java类被用于overlayitems。下面是我拥有的代码片段,为任何对这个问题有见解的人干杯

overlayitem的Java类

    public boolean onTap(int index) {
    OverlayItem item = mapOverlays.get(index);
    Dialog dialog = new Dialog(context);

    dialog.setContentView(R.layout.dialog);
    dialog.setTitle(item.getTitle());

    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText(item.getSnippet());
    Button CallButton = (Button) dialog.findViewById(R.id.CallButton);
    CallButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v) 
        {
            try {
                TheActivityClass.showMessage();
            } catch (Exception e) {
                // TODO Auto-generated catch block

            }
        }
    }
    );
    dialog.show();
    return true;

}
活动课

public void showMessage(){



        Context context = getApplicationContext();
        CharSequence text = "I have just been pressed";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();


    }

您有封装问题。。。activity类不在当前堆栈的顶部,showMessage()方法不是静态的

您应该从Activity类而不是Java overlay类内部控制应用程序逻辑(遵循MVVM逻辑,即MVC,其中Activity是您的控制器)。最好的选择是将对话框/覆盖对象封装在活动中,并在活动类中设置逻辑(在覆盖类中创建适当的方法来实现这一点),或者只创建活动的覆盖和内部类。这将允许你做你想做的事情


希望对您有所帮助。

在showMessage中编写一些log语句或sysout语句,检查它们是否反映在logcat中。首先在您的catch中记录一些内容。然后考虑静态调用非静态方法。最后,试着看看你对视图中的活动有什么引用(上下文,可能是?),你能编译它吗?看起来您试图调用静态(类)方法,但只声明了实例方法。