2016-04-13 10 views
0

を仕事と私はsetContentViewをオーバーライドして、これはBaseActivityコードナビゲーションドロワーすべての活動onNavigationItemSelectedイベントで、私はBaseActivity作る

public class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

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

    } 

    @Override 
    public void setContentView(int layoutResID) 
    { 
     DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_base, null); 
     FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content); 
     getLayoutInflater().inflate(layoutResID, activityContainer, true); 
     super.setContentView(fullView); 
    } 

    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     Log.i("NAV","nav selected"); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_container); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

} 

あるとBaseActivityのXMLがありませんように、この

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/activity_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <FrameLayout 
      android:id="@+id/activity_content" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigationView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:menu="@menu/activity_side_menu_drawer"/> 

</android.support.v4.widget.DrawerLayout> 

とMainActivityについてこのようにこのベースを拡張する

public class MainActivity extends BaseActivity{ 

} 

実際にはナビゲーションはうまく表示されますが、onNavigationItemSelectedは機能していません。

ログに記録しようとしましたか全く動作しませんでした。 何が問題なのですか?

ありがとうございます。

+0

ここで 'setNavigationItemSelectedListener'を呼び出しますか? –

+0

をBaseActivity上に置いてください。したがって、すべてのアクティビティは同じ方法で動作するはずです – Macnux

+0

次にコードを投稿してください。コードの半分を投稿した場合、どうすればお手伝いできますか? –

答えて

0

setNavigationItemSelectedListenerに電話する必要があります。

この方法はfindViewById(R.id.navigationView)

最後にこれは、選択した項目のリスナーがBaseActivityであることを、あなたのナビゲーションビューを教えてくれますnavigationView.setNavigationItemSelectedListener(this)

を呼び出して、あなたのNavigationViewを取得することによって、あなたのNavigationView

スタートで呼び出される必要があります

+0

が働いてくれてありがとうございました – Macnux

+0

最後の質問..私は既にイベントがベースで発生したときに実行するコードを書いています..なぜ私はイベントを発生させるために – Macnux

+0

基本アクティビティに抽象メソッドを作成できます。他のアクティビティでそのメソッドをオーバーライドしてから、そのメソッドを呼び出すだけです。すべてのアクティビティは、そのメソッドの独自の実装を持っています –

関連する問題