2017-02-18 66 views
0

我在一个片段中创建一个界面类似以下内容:我怎样才能在片段实现我的接口在另一个片段

public interface SGFCallBackInterface { 
    void itemSelected(Item item); 
} 

private SGFCallBackInterface mCallbackInterface; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    if (context instanceof SGFCallBackInterface) { 
     mCallbackInterface = (SGFCallBackInterface) context; 
    } else { 
     throw new RuntimeException(context.toString() + " must implement SelectGdsFragment.SGFCallBackInterface"); 
    } 
} 

public void setSGFCallBackInterface(SGFCallBackInterface mCallbackInterface) { 
    this.mCallbackInterface = mCallbackInterface; 
} 

,我会实现,在另一个片段像下面

public class SaleMenageFragment extends Fragment implements SelectGdsFragment.SGFCallBackInterface { 

    ... 

    SelectGdsFragment selectGdsFragment = new SelectGdsFragment(); 
    selectGdsFragment.setSGFCallBackInterface(SaleMenageFragment.this); 

    ... 

} 

@Override 
public void onItemSelected(Item item) { 
    ... 
} 

但它仍然不工作,这是错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.leo.test, PID: 3853 
       java.lang.RuntimeException: [email protected] must implement SelectGdsFragment.SGFCallBackInterface 
        at com.leo.test.Control.Fragment.SaleManagement.SelectGdsClsFragment.onAttach(SelectGdsFragment.java:42) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019) 
        at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:779) 
        at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:819) 
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:660) 
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

我认为错误日志意味着我的Inde xActivity没有实现SelectGdsFragment.SGFCallBackInterface。

但我不想在IndexActivity中实现。
我想在SaleMenageFragment中实现它。

我该怎么做?

+0

弗洛姆,非常感谢你! XDDD – Leo

回答

0

恐怕你必须实现它在你的Activity

看到该文档

Communicating with Fragments

希望它有帮助!

+0

我懂了!非常感谢 !! – Leo

+0

很高兴知道它有帮助! :) –

+0

参考链接:http://simpledeveloper.com/how-to-communicate-between-fragments-and-activities/ – Leo

0

只是删除onAttach部分(上下文的背景下)方法是这样的:

public interface SGFCallBackInterface { 
    void itemSelected(Item item); 
} 

private SGFCallBackInterface mCallbackInterface; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    if (context instanceof SGFCallBackInterface) { 
     mCallbackInterface = (SGFCallBackInterface) context; 
    } // this wont throw an exception if the activity does not implement that interface 
} 

public void setSGFCallBackInterface(SGFCallBackInterface mCallbackInterface) { 
    this.mCallbackInterface = mCallbackInterface; 
} 
+0

对不起,这是行不通的。谢谢 !! – Leo

相关问题