2016-06-17 4 views
1

주 클래스에서 NavigationView에 대한 수신기를 설정해야합니다. 그러나 주된 것은 많은 것들을 포함 할 것이고, 가능한 한 가장 "분리 된"것으로하고 싶습니다. 내가 필요한다고 가정외부 Java 수신기에서 getSupportFragmentManager에 액세스하는 방법

navigationView.setNavigationItemSelectedListener(new NavigationListener()); 

문제는 내가 getSupportFragmentManager 전화를 가지고 온다, 그러나 accesible 아니므 :

그래서 내가 좋아하는 뭔가 자신의 자바 파일에 청취자를 할 것입니다 다음과 같이하십시오 : context.getSupportFragmentManager "작업"을하십시오.

하지만 컨텍스트를 얻는 방법을 모르겠습니다.

어떻게받을 수 있습니까?

ListenerClass : 당신은 그냥 생성자 PARAM로 FragmentActivityNavigationListener의 인스턴스를 전달할 수

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

: 당신의 FragmentActivity에서

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(); 

      // ... 
     } 
    } 
} 

는 :

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

는 완벽했다. 감사! – Shudy