-1

我有一個片段&我有下面的代碼:NPE:嘗試調用接口方法

NavDrawer listener; 
public interface NavDrawer { 
    void showNavDrawer(String msg); 
} 

我設置爲我的片段的導航圖標。當點擊圖標時,我只是調用了Interface方法。

toolbar.setNavigationIcon(android.R.drawable.ic_menu_directions); 
toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     listener.showNavDrawer("Show Drawer"); 
    } 
}); 

MainActivity.class中,我實現了打開導航抽屜的界面。

@Override 
public void showNavDrawer(String msg) { 
    drawer.openDrawer(GravityCompat.START); 
} 

顯示的錯誤是:

顯示java.lang.NullPointerException:嘗試調用接口方法

之前,我張貼此線程,我通過觀察顯示出一些努力和嘗試現有問題的解決方案。但是,目前還不能解決。

+0

不知道爲什麼downvote? :( – user3289108

回答

2

覆蓋onAttach在framgent

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    try { 
     listener= (NavDrawer) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement NavDrawer"); 
    } 
} 

而且還檢查是否監聽器是listener.showNavDrawer( 「顯示抽屜」)之前空;

注意: onAttach(activity)已被棄用,您將擁有一個上下文,您可以使用它。您可以檢查上下文是否爲活動的實例。

此外,只要MainActivity正在實現接口,上述工作將會發揮作用。

http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)

更多信息fragmet通信@http://developer.android.com/training/basics/fragments/communicating.html

+1

這是正確的,只要'活動'正在執行'NavDrawer' – Blackbelt

+0

@Blackbelt斑點 – Raghunandan

+0

哇,謝謝你的工作,它的工作原理只需要替換onAttach()中的上下文而不是Activity – user3289108

0

因爲你的listener爲null,在MainActivity初始化。

public class MainActivity extends AppCompatActivity implements NavDrawer{ 

    private NavDrawer listener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ..... 

     listener= new NavDrawer(this); 

    } 

} 
相關問題