2016-06-12 21 views
1

這是我第一個Android項目。我需要創建一個滑動菜單來啓動不同的頁面。然後我發現在Android Studio 1.4中有一個默認的「導航抽屜」活動供我們使用。 Here is the default image如何使用Android NavigationDrawer創建其他片段?

所以我想點擊不同的項目來啓動不同的片段(我認爲它是片段不活動)。我如何添加代碼來啓動?

`我想我應該在這裏添加代碼

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camara) { 
     // Handle the camera action 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
}` 

這裏是所有在MainActivity:

package com.ad_imagine.navigationdrawer2; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

public class Main2Activity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main2, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camara) { 
     // Handle the camera action 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

}」

這裏是主要佈局:

<include layout="@layout/app_bar_main2" android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView android:id="@+id/nav_view" 
    android:layout_width="wrap_content" android:layout_height="match_parent" 
    android:layout_gravity="start" android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_main2"  app:menu="@menu/activity_main2_drawer" /> 

回答

0

你在正確的軌道上,這就是我如何做的(只有一個片段的例子,其他的都是一樣的)。

case R.id.nav_feedback: handleFeedback(); 
        break; 

我喜歡有方法,清楚地顯示他們的名字,他們在做什麼;我也嘗試將一些東西委託給私有方法來保持我的代碼更清潔。關於這個項目的點擊,我們需要處理的反饋,並且該方法是這樣的:

private void handleFeedback() { 
    changeToFragment(FeedbackFragment.newInstance()); 
    try { 
     getSupportActionBar().setTitle(R.string.feedback); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

現在有一個叫changeToFragment方法,應該是顯而易見的是什麼呢:

private void changeToFragment(Fragment fragment){ 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction() 
      .replace(R.id.content_navigation_drawer, fragment) 
      .commit(); 
} 

當然,還有片段類調用FeedbackFragment,並確保您要麼使用android.app.FragmentgetFragmentManagerandroid.support.v4.app.FragmentgetSupportFragmentManager不要混合這些,否則你會有一個不好的時間。請參閱this question查看他們的差異以及您想要使用哪一個。我個人選擇了支持庫中的一個。

我會留給你來實現片段類,我希望這個代碼對你來說是可以理解的。

+0

謝謝,你才華橫溢,對我來說非常有用!但是我有一個問題,當我在'fragment'中使用'replacement(R.id.content_navigation_drawer,fragment)'時,它也顯示'content_navigation_drawer'的佈局。 –

+0

你是什麼意思?它顯示片段和'content_navigation_drawer'? 'content_navigation_drawer'中有' – Vucko

+0

','TextView',文本是'content1','fragment'中有'TextView',文本是'content2'。當我第一次啓動應用程序時,它顯示「content1」但是當我單擊項目時,它會在同一頁面中顯示「content1」和「content2」。 –