2015-09-24 77 views
0

我正在嘗試創建導航抽屜。我已經創建了它,但問題是,當我第一次打開應用程序時,片段顯示在內容區域中,但在導航抽屜中未突出顯示。項目在導航抽屜中未突出顯示

這是代碼我使用:

package com.hfad.evenit; 

    import android.app.Fragment; 
    import android.app.FragmentTransaction; 
    import android.content.res.Configuration; 
    import android.support.v4.widget.DrawerLayout; 
    import android.support.v7.app.ActionBarDrawerToggle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 

    import com.hfad.evenit.Fragments.FourthFragment; 
    import com.hfad.evenit.Fragments.SecondFragment; 
    import com.hfad.evenit.Fragments.ThirdFragment; 
    import com.hfad.evenit.Fragments.TopFragment; 

    public class Home extends AppCompatActivity { 

     String []FragmentTitles; 
     ListView DrawerList; 
     DrawerLayout drawerLayout; 
     ActionBarDrawerToggle drawerToggle; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.home); 

      FragmentTitles = getResources().getStringArray(R.array.fragment_titles); 
      DrawerList = (ListView) findViewById(R.id.drawer); 

      drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
      DrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, FragmentTitles)); 

      DrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        selectItem(position); 
       } 
      }); 


      selectItem(0); 
      DrawerList.setSelection(0); 


      drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer) { 
       @Override 
       public void onDrawerClosed(View view) { 
        super.onDrawerClosed(view); 
        invalidateOptionsMenu(); 
       } 

       @Override 
       public void onDrawerOpened(View drawerView) { 
        super.onDrawerOpened(drawerView); 
        invalidateOptionsMenu(); 
       } 
      }; 
      drawerLayout.setDrawerListener(drawerToggle); 

      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      getSupportActionBar().setHomeButtonEnabled(true); 

     } 

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

     @Override 
     protected void onPostCreate(Bundle savedInstanceState) { 
      super.onPostCreate(savedInstanceState); 
      drawerToggle.syncState(); 
     } 

     @Override 
     public boolean onPrepareOptionsMenu(Menu menu) { 

      boolean drawerOpen = drawerLayout.isDrawerOpen(DrawerList); 
      menu.findItem(R.id.action_share).setVisible(!drawerOpen); 
      return super.onPrepareOptionsMenu(menu); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.menu_home, 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. 
      if(drawerToggle.onOptionsItemSelected(item)) 
      { 
       return true; 
      } 
      int id = item.getItemId(); 

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

      return super.onOptionsItemSelected(item); 
     } 

     public void selectItem(int position) 
     { 
      Fragment fragment; 
      switch(position) 
      { 
       case 0: 
        fragment = new TopFragment(); 
        break; 
       case 1: 
        fragment = new SecondFragment(); 
        break; 
       case 2: 
        fragment = new ThirdFragment(); 
        break; 
       case 3: 
        fragment = new FourthFragment(); 
        break; 
       default: 
        fragment = new TopFragment(); 
      } 

      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.content_frame, fragment); 
      ft.addToBackStack(null); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      ft.commit(); 

      setActionBarTitle(position); 

      drawerLayout.closeDrawer(DrawerList); 

     } 

     public void setActionBarTitle(int position) 
     { 
      String title; 
      title = FragmentTitles[position]; 
      getSupportActionBar().setTitle(title); 
     } 

} 
+0

您是否嘗試過使用'setItemChecked(int position,boolean value)'方法? – freddieptf

+0

謝謝你,你是一個拯救生命的人。 –

+0

完美工作。 –

回答

0

在這裏......

public void selectItem(int position) { 

    ... 

    setActionBarTitle(position); 

    drawerLayout.closeDrawer(DrawerList); 
} 

添加DrawerList.setItemChecked(position, true);可能工作。

public void selectItem(int position) { 

    ... 

    setActionBarTitle(position); 

    DrawerList.setItemChecked(position, true); // <== add this line 

    drawerLayout.closeDrawer(DrawerList); 
} 

其實我不使用Android Studio的項目模板的抽屜式導航,但使用NavigationView(建議爲便於使用),最近。如果我的答案無效,請忘記這一點。

1

用於將項目狀態更改爲「突出顯示」或當前激活的方法是setItemChecked(int position, boolean value)。最好將其放在selectItem方法中,以便在調用SelectItem方法後「突出顯示」項目發生更改。

您可能還需要考慮將listView的選擇模式設置爲CHOICE_MODE_SINGLE,以便在給定時間只有一個項目處於活動狀態。

drawerList.setChoiceMode(CHOICE_MODE_SINGLE);