2014-11-22 3 views
1

Итак, сейчас я работаю над Android-приложением, и я пытаюсь переключиться на различные действия с NavigationDrawer. В моей MainActivity у меня установлен навигационный ящик и начальныйфрагмент, который выступает в качестве основного вида/активности, когда приложение открыто.Перемещение между действиями с помощью NavigationDrawer?

Однако я не могу этого сделать. Всякий раз, когда я нажимаю на любой элемент списка, который у меня есть в моем навигационном ящике, нет переключения действий. Я просмотрел StackOverflow и другие веб-сайты для решения моей проблемы, но, похоже, я не могу понять эту проблему.

public class MainActivity extends FragmentActivity { 

Button tea_type; 
private String[] navDrawerTitles; 
private DrawerLayout navDrawerLayout; 
private ListView mDrawerList; 
private ActionBarDrawerToggle mDrawerToggle; 
private CharSequence mTitle; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    navDrawerTitles = getResources().getStringArray(R.array.nav_array); 
    navDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 

    // Set the adapter for the list view 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, navDrawerTitles)); 

     // When a menu item is clicked 
    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long stuff) { 
      final FragmentManager manager = getSupportFragmentManager(); 
      final FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
      Fragment frag; 
      // Depending on position, set your fragment 
      if (position == 0) { 
       frag = new StartingFragment(); 
       fragmentTransaction.add(R.id.starting_fragment, frag); 
       fragmentTransaction.addToBackStack(null); 

       // "Commits" the fragment to the fragment view in the layout 
       fragmentTransaction.commit(); 
      } 
     } 
    }); 

    navDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */ 
    navDrawerLayout, /* DrawerLayout object */ 
    R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
    R.string.drawer_open, /* "open drawer" description */ 
    R.string.drawer_close /* "close drawer" description */ 
    ) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      getActionBar().setTitle(R.string.app_name); 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      getActionBar().setTitle(R.string.app_name); 
     } 
    }; 

    // Set the drawer toggle as the DrawerListener 
    navDrawerLayout.setDrawerListener(mDrawerToggle); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 
} 

/* Called whenever we call invalidateOptionsMenu() */ 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // If the nav drawer is open, hide action items related to the content 
    // view 
    boolean drawerOpen = navDrawerLayout.isDrawerOpen(mDrawerList); 
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 

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


public class DrawerItemClickListener implements 
     ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     selectItem(position); 

     } 
    } 

/** Swaps fragments in the main content view */ 
/** Starts an Activity when item is clicked*/ 
private void selectItem(int position) { 
    switch (position) { 
    case 0: 
     Intent i1 = new Intent(MainActivity.this, setSelfTimeActivity.class); 
     this.startActivity(i1); 
     break; 
    } 

} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getActionBar().setTitle(mTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    // Pass the event to ActionBarDrawerToggle, if it returns 
    // true, then it has handled the app icon touch event 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle your other action bar items... 

    return super.onOptionsItemSelected(item); 
} 
} 

Я думаю, что проблема может быть связана с этим методом, потому что везде, где я смотрел, были комментарии о методе selectItem. Однако я не вижу ничего плохого.

/** Swaps fragments in the main content view */ 
/** Starts an Activity when item is clicked*/ 
private void selectItem(int position) { 
    switch (position) { 
    case 0: 
     Intent i1 = new Intent(MainActivity.this, setSelfTimeActivity.class); 
     startActivity(i1); 
     break; 
    } 

} 
+0

Это, безусловно, способно, я делал это сам во многих случаях и просто ответил на аналогичный вопрос. см. http://stackoverflow.com/questions/27312813/multiple-activities-not-fragments-with-a-navigationdrawer-how-to-show-current/27314192#27314192 – Chris

+0

Возможный дубликат [того же навигационного ящика для разных видов деятельности ] (http://stackoverflow.com/questions/19451715/same-navigation-drawer-on-different-activities) – Chris

ответ

0

Ответил в NavigationDrawer with Activities

Короче говоря, нет никакого способа, чтобы использовать Activity сек при сохранении панели навигации, вы должны будете использовать фрагменты.