将StartActivityforResult移动到外部类

时间:2012-05-07 08:16:25

标签: android oop

我正在尝试整理我的代码,以便我可以轻松地重用元素而无需复制工作/代码。

我有一个contactpicker和代码来处理我的应用程序中的结果,我希望将其放入自己的外部类中,以便我可以在多个区域重用它。

我遇到了一个问题 - 为了调用StartActivityforResult,我需要将活动传递给外部类 - 但是我不知道该怎么做?

以下是我用作外部联系人选择器的课程:

    public class ContactFinder {

    private static final int CONTACT_PICKER_RESULT = 1001;
    private Activity atv;
    public ContactFinder(Activity atv) {
        this.atv=atv;
    }
public void startContactPicker()
{
    Intent contactPickerIntent=new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    //Shows CONTACT_PICKER_RESULT cannot be resolved to a variable
    atv.startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);

}
}

那么如何使用以下内容从我的主要活动中调用它:

ContactFinder cf=new ContactFinder(???));// how do I pass the activity to this external class

cf.startContactPicker();

2 个答案:

答案 0 :(得分:2)

您可以做的是从活动中传递类构造函数中的上下文。并保存。稍后您可以使用该上下文创建对话框以及您希望从该活动中获得的任何内容。

class myclass {
    Context context;

    myclass(Context temp_context) {
       context = temp_context;
    }
}

从敏感度来看,你必须这样做:

myclass ob = new myclass(getApplicationContext() or this);

现在,您可以将类中的上下文用于与活动相同的任何目的。 就像你想要开始活动一样,你可以简单地写一下。

context.StartActivity(intent);

希望它会帮助你..

答案 1 :(得分:0)

this传递给您正在创建此对象的Activity

ContactFinder cf=new ContactFinder(this);
cf.startContactPicker();

请注意在onActivityResult()中实施Activity,以处理已启动的Activity给出的结果。

最好有一个基本的Activity课程,为onActivityResult()实施ContactFinder并扩展每个Activity(您要在其中使用ContactFinder )来自基本Actvitiy