从标准java类完成活动

时间:2012-06-25 21:16:42

标签: android android-activity

我目前正在开发一个Android项目,我有一个活动,我们称之为MyActivity,这个活动调用一个名为MyClass的标准Java类。

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

我该怎么做呢,感谢您提供的任何帮助。

4 个答案:

答案 0 :(得分:2)

可以传递Context,但您需要将其投放到Activity(或简单地传递Activity本身),尽管如此将军似乎是一种不好的做法。

答案 1 :(得分:2)

最安全的解决方案使用侦听器和处理程序。它很复杂,但确保非直接调用以完成活动。

你的听众:

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);
             }
        });
    }
}

这是安全的,因为Activity不是由MyClass对象直接完成的,它是通过命令处理程序完成活动的侦听器完成的。即使你在第二个线程上运行MyClass对象,这段代码也会很好用。

编辑:CLOSE var添加我忘记声明并初始化它。

答案 2 :(得分:1)

MyActivity传递给MyClass Activity。从那里你可以拨打myActivity.finish();

例如:

private Activity myActivity;

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

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

MyActivity

MyClass myClass = new MyClass(this);

这是有风险的,因为你持有Activity的引用,这可能会导致内存泄漏。

答案 3 :(得分:0)

如果您的java类是嵌套的内部类,则可以使用:

public class MyActivity extends Activity {

    public static class JavaClass {    

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

否则你必须传递java类Context(即传递this的引用,因为Activity extends Context)并将其存储为私有实例变量。