0

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

我有一个联系人选择器和代码来处理我想放入其自己的外部类的应用程序中的结果,以便我可以在多个区域重用它。

我遇到了一个问题——为了调用 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();
4

2 回答 2

2

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

class myclass {
    Context context;

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

从积极性你必须这样做:

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

现在你可以在你的类中使用上下文来实现任何与活动相同的目的。就像如果你想开始活动那么你可以简单地写。

context.StartActivity(intent);

希望它会帮助你..

于 2012-05-07T08:28:37.650 回答
0

传递您创建此对象的位置thisActivity

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

请记住onActivityResult()在您的Activity也实施,以处理由 started 给出的结果Activity

最好有一个基本Activity类,它将onActivityResult()为您实现ContactFinder并从基本扩展每个Activity(您想要使用ContactFinder的)Actvitiy

于 2012-05-07T08:29:18.947 回答