0

引き出しを開くデフォルトのアイコンを変更したいと思います。私はそれを行うことができる方法はありますか?質問で検索したところ、解決できませんでした。ここに私のナビゲーション・ドロワー・クラスがあります。私はそれが私が断片を必要とする他のクラスでそれをインスタンス化します。デフォルトの引き出しアイコン(ハンバーガー)を変更する

public class navigation_drawer extends Fragment { 

public static final String PREF_FILE_NAME = "testpref"; 
public static final String KEY_USER_LEARNED_DRAWER = "user_learned_drawer"; 

private ActionBarDrawerToggle drawer_toggle; 
private DrawerLayout my_drawer_layout; 

private View container_view; 

private boolean m_userLearnedDrawer; 
private boolean m_fromSavedInstanceState; 

public navigation_drawer() { 
    // Required empty public constructor 
} 

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

    m_userLearnedDrawer = Boolean.valueOf(
      readFromPreferences(getActivity() , KEY_USER_LEARNED_DRAWER , "false") 
    ); 

    if(savedInstanceState != null) 
    { 
     m_fromSavedInstanceState = true; 
    } 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
} 

public void setUp(int fragmentId , DrawerLayout dl , final Toolbar toolbar) 
{ 

    container_view = getActivity().findViewById(fragmentId); 
    my_drawer_layout = dl; 
    drawer_toggle = new ActionBarDrawerToggle(getActivity() , dl , toolbar , 
      R.string.drawer_open , R.string.drawer_close) { 

     @Override 
     public void onDrawerOpened(View drawerView) 
     { 
      super.onDrawerOpened(drawerView); 
      if(! m_userLearnedDrawer) 
      { 
       m_userLearnedDrawer = true; 
       saveToPreferences(getActivity() , PREF_FILE_NAME , 
         m_userLearnedDrawer + ""); 
      } 

      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) 
     { 
      super.onDrawerClosed(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      if (item !=null && item.getItemId() == android.R.id.home) 
      { 
       if (my_drawer_layout.isDrawerOpen(Gravity.RIGHT)) 
       { 
        my_drawer_layout.closeDrawer(Gravity.RIGHT); 
       } 
       else 
       { 
        my_drawer_layout.openDrawer(Gravity.RIGHT); 
       } 
       return true; 
      } 
      return false; 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) 
     { 
      if(slideOffset < 0.1) { 
       toolbar.setAlpha(1 - slideOffset); 
      } 
     } 
    }; 

    /* 
    if(!m_userLearnedDrawer && !m_fromSavedInstanceState) 
    { 
     my_drawer_layout.openDrawer(container_view); 
    } 
    */ 

    my_drawer_layout.setDrawerListener(drawer_toggle); 

    my_drawer_layout.post(
      new Runnable() { 
       @Override 
       public void run() { 
        drawer_toggle.syncState(); 
       } 
      } 
    ); 
} 

public static void saveToPreferences(Context con , String preferenceName , String preferenceValue) 
{ 
    SharedPreferences sp = con.getSharedPreferences(PREF_FILE_NAME , Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putString(preferenceName , preferenceValue); 
    editor.apply(); 
} 

public static String readFromPreferences(Context con , String preferenceName , String preferenceValue) 
{ 
    SharedPreferences sp = con.getSharedPreferences(PREF_FILE_NAME , Context.MODE_PRIVATE); 
    return sp.getString(preferenceName , preferenceValue); 
} 
} 

しかし、私はこのコードを置くときtoolbar.setNavigationIcon(R.drawable.picture); 内部には、デフォルトのハンバーガーのアイコンが表示されますが、私はスライドまたはアイコンをクリックしたときに、それは私の絵に変わり、それがデフォルトのアイコンを置き換えるonDrawerOpened。 ここでは、私がナビゲーションドロワークラスをインスタンス化するクラスがあります。

public class welcome extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcome); 

    getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 

    my_toolbar = (Toolbar) findViewById(R.id.app_bar); 
    setSupportActionBar(my_toolbar); 

    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    navigation_drawer myNav = (navigation_drawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 

    myNav.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.welcome_layout), my_toolbar); 

} 
+0

あなたは何を求めていますか?イメージを常にアイコンにしたい場合は、 'toolbar.setNavigationIcon()'を 'onDrawerOpened()'から呼び出して 'setUp()'メソッドに直接移動してください。 –

+0

私はそれをしましたが、うまくいきませんでした –

+0

いつもデフォルトのものに置き換えたい –

答えて

0

はあなたがトグル上のSyncState()を呼び出した後、それを呼び出して、そのRunnableをのrun()メソッドでは、その後にそれを移動する必要があります。

関連する問題