2017-04-23 25 views
3

我有一個'Common'類和一個片段'FragmentTest'。 'Common.java'是一個普通的類,它具有一些用於其他活動的通用功能。這些功能通過每個活動的上下文進行訪問。在這裏,我將片段的上下文傳遞給該類中的某個函數。我做這樣的我們如何將上下文轉換爲片段引用?

在片段: -

Common commonObj = new Common(); 
commonObj.myfunction(this.getActivity(),"Do you want to Update ?"); 

,並在類的一些操作我試圖要返回片段class.Like在此之後 : -

public void myfunction(Context context , String str){  
    //....// 
    if(context.getClass().isInstance(FragmentTest.class)){ 
     **FragmentTest mContext = (FragmentTest)context;** 
     mContext.FunctionInFragment(); 
    } 
} 

但我有這個錯誤..因爲我不能將上下文轉換爲片段引用。使用一些基本的片段(BaseFragment)

public void myfunction(BaseFragment fragment, String str){ 
    //....// 
    if(fragment.getClass().isInstance(FragmentTest.class)){ 
     FragmentTest fr = (FragmentTest) fragment; 
     fr.FunctionInFragment(); 
    } 
} 

即從它繼承: 有人請幫助..

+0

FragmentTest是Fragment還是FragmentActivity?它們不是一回事,因爲'Fragment'不是'Context',所以你不能將'Context'投射到'Fragment'。 –

+0

這是一個片段 – bepositive

+0

該片段在一個Activity類中使用 – bepositive

回答

1

首先,您不能將Context投射到Fragment,因爲Fragment不會延伸ContextActivity確實延伸Context這就是爲什麼當你從一個活動這樣做你正在嘗試工作。

我會建議理想的是,Common類中的方法應完全不知道您的Fragment的存在。這樣它們就不會「耦合」在一起。爲了達到這個目的,你可以使用一個回調接口。

創建interface如下:

public interface Callback<T> { 

    onNext(T result); 
} 

然後你就可以在Common改變你的方法如下:

public void myfunction(Callback<Void> callback , String str){  

    //....// 
    callback.onNext(null); 
} 

然後,當你從Fragment你會做調用方法Common它是這樣的:

Common commonObj = new Common(); 
commonObj.myfunction(
    new Callback<Void>() { 
     @Override 
     public void onNext(Void result) { 
      functionInFragment(); 
     } 
    }, 
    "Do you want to Update ?" 
); 

如果您需要將數據發送回該函數,則可以更改回調的返回類型。例如,如果你想傳遞迴你會用Callback<String>,然後在原來的呼叫的方法是這樣的字符串:

new Callback<String>() { 
    @Override 
    public void onNext(String result) { 

    } 
} 

而在你Common類,你會說它是這樣的:

public void myfunction(Callback<String> callback , String str){  

    //....// 
    String result = "Hello from common"; 
    callback.onNext(result); 
} 
+0

非常感謝!你救了我的一天:) – bepositive

0

你可以做這樣的事情。