2016-06-17 11 views
1

メインクラスのNavigationViewのリスナーを設定する必要があります。しかし、メインは、たくさんのものを含んでおり、私はそれを可能な限り「分離した」ものにしたいと思っています。私は私がする必要があるとし、外部JavaリスナーのgetSupportFragmentManagerへのアクセス方法

navigationView.setNavigationItemSelectedListener(new NavigationListener()); 

問題は、私はgetSupportFragmentManagerを呼び出すために持っていることを、来る、しかしづけしないので、:

だから私のようなものに、自分のjavaファイルでリスナーを行います次のようなことをしてください:context.getSupportFragmentManager irを "仕事"にする。

しかし、私はどのようにコンテキストを取得するのか分かりません。

どうすれば入手できますか?

ListenerClass:

public class NavigationListener implements NavigationView.OnNavigationItemSelectedListener { 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     boolean fragmentTransaction = false; 
     String TAG = "NavigationViewListener"; 
     Logger.init(TAG); 
     Fragment fragment = null; 
     switch (item.getItemId()){ 
      case R.id.nav_home: 
       fragment = new FragmentHome(); 
       fragmentTransaction = true; 
       break; 
      case R.id.nav_map: 
       fragment = new FragmentMap(); 
       fragmentTransaction = true; 
       break; 
      case R.id.nav_log_out: 
       Logger.d("Pulsada opnción de LogOut"); 
       break; 
     } 

     if(fragmentTransaction){ 
      getSupportFragmentManager().beginTransaction() 
        .replace(R.id.main_content, fragment) 
        .commit(); 

      item.setChecked(true); 
      getSupportActionBar().setTitle(item.getTitle()); 
     } 
    } 
} 

答えて

1

あなただけのコンストラクタのparamとしてあなたFragmentActivityNavigationListenerのインスタンスを渡すことができます。

public class NavigationListener implements NavigationView.OnNavigationItemSelectedListener { 

    FragmentActivity activity;   

    public NavigationListener(FragmentActivity activity) { 
     this.activity = activity; 
    } 

    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

     // ... 

     if(fragmentTransaction){ 
      activity.getSupportFragmentManager().beginTransaction() 
       .replace(R.id.main_content, fragment) 
       .commit(); 

      // ... 
     } 
    } 
} 

あなたFragmentActivityから:

navigationView.setNavigationItemSelectedListener(new NavigationListener(this)); 
+0

それは完璧に働きました。ありがとう! – Shudy

関連する問題