2012-06-25 25 views
0

我目前正在开发一个android项目,并且我有一个活动,可以称之为MyActivity,并且此活动调用一个名为MyClass的标准Java类。完成标准java类的活动

我需要MyClass的完成MyActivity活动,但我不能找出如何做到这一点。我想我可能能够将上下文传递给标准java类并调用context.finish(),但这似乎不可用。

我该如何做到这一点,感谢您提供的任何帮助。

回答

2

可以通过Context,但你需要将其转换为Activity(或者只是通过Activity本身),虽然这在一般的似乎是一个不好的做法。

1

传递MyActivityMyClassActivity。从那里,你可以拨打myActivity.finish();

例如:

private Activity myActivity; 

public MyClass(Activity myActivity){ 
    this.myActivity = myActivity; 
} 

public void stopMyActivity(){ 
    myActivity.finish(); 
} 

而且在MyActivity

MyClass myClass = new MyClass(this); 

这是有风险的,因为你持有一个参考的Activity,这可能会导致内存泄漏。

+0

+1因泄漏问题 – gobernador

0

如果你的java类是一个嵌套的内部类,你可以使用:

public class MyActivity extends Activity { 

    public static class JavaClass {  

     public void finishActivity() { 
      MyActivity.finish(); 
     } 
    }  
} 

否则,你就必须通过Java类中的Context(即它传递给this一个参考,因为Activity extends Context)和将其存储为私有实例变量。

2

最安全的解决方案使用监听器和Handler。这很复杂,但确保不直接致电完成活动。

你的听众:

interface OnWantToCloseListener{ 
    public void onWantToClose(); 
} 

类应关闭活动。

class MyClass { 

    private OnWantToCloseListener listener; 

    public void setWantToCloseListener(OnWantToCloseListener listener){ 
     this.listener = listener; 
    } 

    private void fireOnWantToClose(){ 
     if(this.listener != null) 
      listener.onWantToClose(); 
    } 
} 

当你想关闭你的活动,你必须调用fireOnWantToClose()方法。

public MyActivity extends Activity{ 

    public void onCreate(){ 
     final int CLOSE = 1; //number to identify what happens 
     MyClass my_class = new MyClass(); 
     final Handler handler = new Handler(){ 
      public void handleMessage(Message msg){ 
       if(msg.what == CLOSE) 
         MyActivity.this.finish(); 
      } 
     }); 
     my_class.setOnWantToCloseListener(new OnWantToCloseListener(){ 
      public void onWantToClose(){ 
        handler.sendEmptyMessage(CLOSE); 
      } 
     }); 
    } 
} 

这是安全的,因为活动不是由MyClass的对象直接完成,它是通过订单处理程序,完成活动的监听器完成。即使您在第二个线程上运行MyClass对象,此代码也可以很好地工作。

编辑:关闭var添加我忘了声明并初始化它。