如何在Android中正确退出处理草图

时间:2016-09-21 13:54:59

标签: android processing

我目前正在Android Studio中构建一个涉及Processing sketch的应用程序。

主要课程:

import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;

import processing.android.PFragment;
import processing.core.PApplet;

public class ClassMain extends Activity {
    /**************************************************/
    PApplet sketch;
    /**************************************************/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.class_main);

        FragmentManager fragmentManager = getFragmentManager();
        sketch = new ClassSketch();
        PFragment fragment = new PFragment();
        fragment.setSketch(sketch);
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
    }
    /**************************************************/
    @Override
    public void onBackPressed()
    {

        //ClassMain.this.finish();
    }
    /**************************************************/
    //It doesn't work if called from sketch...
    public void exits()
    {
        ClassMain.this.finish();
    }
    /**************************************************/
}

处理草图:

import android.view.KeyEvent;
import processing.core.PApplet;

public class ClassSketch extends PApplet {
    /*****************************************************************************/
    public void settings()
    {
        size(displayWidth, displayHeight);
    }
    /*****************************************************************************/
    public void setup()
    {
    }
    /*****************************************************************************/
    public void draw()
    {
        keykey();
    }
    public void keykey()
    {
        if(keyPressed)
        {
            if (key == CODED) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    //non of the following work:
                    //exit();
                    ClassMain j = new ClassMain();
                    j.exits();
                }
            }
        }
    }
}

问题在于,我希望用户根据我稍后将在草图中添加的某些情况,不仅要退出草图,还要退出托管它的类(ClassMain)。 当草图中出现某些事情时,我希望能够退出整个MainClass,但我恰好失败了。 感谢您的支持。

2 个答案:

答案 0 :(得分:0)

这没有意义:

ClassMain j = new ClassMain();
j.exits();

在这里,您要创建ClassMain的新实例,然后立即退出。那不会做任何事情。

相反,您需要告诉已存在的父ClassMain退出。

要执行此操作,您需要引用父ClassMain实例,您可以将其引入ClassSketch构造函数:

public class ClassSketch extends PApplet {

    private ClassMain parent;

    public ClassSketch(ClassMain parent){
       this.parent = parent;
    }

    public void keykey(){
       parent.exits();
    }
}

然后,要将实例传递给构造函数,您只需使用this关键字:

protected void onCreate(Bundle savedInstanceState) {
        sketch = new ClassSketch(this);
}

答案 1 :(得分:0)

作为对上述内容的补充说明,请不要忘记在super.onCreate(savedInstanceState);函数中致电onCreate()

您可以通过finish()访问this.getActivity().finish();直接退出草图。请注意,在API级别16及更高版本中,您还可以在here中注释this.getActivity().finishAffinity();

最后,如果按 home 按钮,它会调用onStop(),因此应用程序会在内存中徘徊。如果按后退按钮,则也会调用onDestroy()。如果您按照说明调用finish(),则可以保证onDestroy()被调用。

我的两分钱......

Kf