2012-05-07 61 views
0

我正在嘗試整理我的代碼,以便可以輕鬆地重複使用元素而不必重複工作/代碼。將StartActivityforResult移動到外部類

我有一個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(); 

回答

0

thisActivity在其中創建該對象。

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

記住要在您的ActivityonActivityResult(),處理由開始Activity給出的結果。

最好有一個基本的Activity類將實施onActivityResult()ContactFinder和擴展的每個Activity(其中要使用ContactFinder)從基本Actvitiy

+0

我實際執行相同的外部類中的結果,然後創建了一個getter將數據引入當前活動。我明白你爲什麼也能工作。非常感謝您的幫助 :) –

2

你可以做什麼從活動傳遞類構造函數中的上下文。並保存它。稍後,您可以使用該上下文來創建對話框以及您希望從該活動獲得的任何內容。

class myclass { 
    Context context; 

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

從atcitivity你必須做這樣的:

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

現在你可以使用上下文類爲任何目的相同的活動。 就像如果你想開始活動,那麼你可以簡單地寫。

context.StartActivity(intent); 

希望它會幫助你..

相關問題