我目前正在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
,但我恰好失败了。
感谢您的支持。
答案 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