Android 从ActionBar单击应用程序名称时导航抽屉未打开
我已经在我的新应用程序中实现了导航抽屉。但我无法从ActionBar获取应用程序名称来切换导航抽屉。但是,当我拖动导航抽屉时,ActionBar会通过更改为箭头来响应此操作 这是我的密码: 服务\u活动\u main.xml ServicesNavigationDrawerFragment.javaAndroid 从ActionBar单击应用程序名称时导航抽屉未打开,android,navigation-drawer,Android,Navigation Drawer,我已经在我的新应用程序中实现了导航抽屉。但我无法从ActionBar获取应用程序名称来切换导航抽屉。但是,当我拖动导航抽屉时,ActionBar会通过更改为箭头来响应此操作 这是我的密码: 服务\u活动\u main.xml ServicesNavigationDrawerFragment.java public class ServicesNavigationDrawerFragment extends Fragment { public final static String TA
public class ServicesNavigationDrawerFragment extends Fragment {
public final static String TAG = "ServicesNavigationDrawerFragment";
String[] titles = {
"String 1", // 0
"String 2" // 1
};
int[] images = {
R.drawable.service_build_license,
R.drawable.service_build_license
};
private final static String STATE_SELECTED_POSITION = "SELECTED_POSITION";
private final static String PREF_USER_LEARNED_DRAWER = "USER_LEARNED_DRAWER";
private int selectedPosition = 0;
private boolean fromSavedInstance;
private boolean userLearnedDrawer;
GridView drawerGridView;
DrawerLayout drawerLayout;
FrameLayout navigationDrawerLayout;
ActionBarDrawerToggle drawerToggle;
private NavigationDrawerCallbacks callbacks;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
userLearnedDrawer = sharedPreferences.getBoolean(PREF_USER_LEARNED_DRAWER, false);
if(savedInstanceState != null) {
selectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
fromSavedInstance = true;
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
drawerGridView = (GridView) inflater.inflate(R.layout.services_fragment_navigation_drawer, container, false);
drawerGridView.setAdapter(new ServicesAdapter(titles, images));
drawerGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
return drawerGridView;
}
@Override
public void onAttach(final Activity activity) {
super.onAttach(activity);
try {
callbacks = (NavigationDrawerCallbacks) activity;
drawerLayout = (DrawerLayout) activity.findViewById(R.id.activity_services_drawer_layout);
navigationDrawerLayout = (FrameLayout) activity.findViewById(R.id.services_navigation_drawer_layout);
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Log.i(TAG, "Drawer Closed!");
if (!isAdded()) {
return;
}
// activity.invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Log.i(TAG, "Drawer Opened!");
if (!isAdded()) {
return;
}
if( ! userLearnedDrawer) {
userLearnedDrawer = true;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
sharedPreferences.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
}
// activity.invalidateOptionsMenu();
}
};
if( ! userLearnedDrawer && ! fromSavedInstance) {
drawerLayout.openDrawer(navigationDrawerLayout);
}
drawerLayout.post(new Runnable() {
@Override
public void run() {
drawerToggle.syncState();
}
});
drawerLayout.setDrawerListener(drawerToggle);
} catch(ClassCastException e) {
throw new ClassCastException(activity.getClass() + " must implements NavigationDrawerCallbacks interface.");
}
}
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, selectedPosition);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
private void selectItem(int position) {
selectedPosition = position;
if(drawerGridView != null) {
drawerGridView.setItemChecked(position, true);
}
if(drawerLayout != null) {
drawerLayout.closeDrawer(navigationDrawerLayout);
}
if(callbacks != null) {
callbacks.onNavigationDrawerItemSelected(position);
}
}
private class ServicesAdapter extends BaseAdapter {
public final static String TAG = "ServicesAdapter";
private Context context;
private LayoutInflater inflater;
private String[] titles;
private int[] images;
private ServicesAdapter(String[] titles, int[] images) {
if(titles.length != images.length) {
throw new RuntimeException("You Must Provide Same Number of Titles and Images.");
}
context = getActivity();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.titles = titles;
this.images = images;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return titles[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = null;
if(convertView != null) {
textView = (TextView) convertView;
} else {
textView = (TextView) inflater.inflate(R.layout.services_layout_drawer_item, parent, false);
}
Log.i(TAG, textView.getCompoundDrawables()[1].getBounds().toString());
Drawable drawable = context.getResources().getDrawable(images[position]);
drawable.setBounds(new Rect(0, 0, 128, 128));
textView.setText(titles[position]);
textView.setCompoundDrawables(null, drawable, null, null);
return textView;
}
}
public interface NavigationDrawerCallbacks {
public void onNavigationDrawerItemSelected(int position);
}
}
公共类服务navigationdrawerfragment扩展片段{
公共最终静态字符串TAG=“ServicesNavigationDrawerFragment”;
字符串[]标题={
“字符串1”,//0
“字符串2”//1
};
int[]图像={
R.drawable.service\u build\u许可证,
R.drawable.service\u build\u许可证
};
私有最终静态字符串状态\u SELECTED\u POSITION=“SELECTED\u POSITION”;
私有最终静态字符串PREF\u USER\u LEARNED\u DRAWER=“USER\u LEARNED\u DRAWER”;
private int selectedPosition=0;
私有布尔值来自savedinstance;
私有布尔userLearnedDrawer;
GridView-DrumerGridView;
抽屉布局抽屉布局;
框架布局导航抽屉布局;
ActionBarDrawerToggle抽屉切换;
私有导航抽屉回调回调;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(getActivity());
userLearnedDrawer=SharedReferences.getBoolean(PREF_USER_LEARNED_DRAWER,false);
如果(savedInstanceState!=null){
selectedPosition=savedInstanceState.getInt(STATE\u SELECTED\u POSITION);
fromSavedInstance=true;
}
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
DroperGridView=(GridView)充气器。充气(R.layout.services\u fragment\u navigation\u抽屉,容器,false);
setAdapter(新服务适配器(标题、图像));
DroperGridView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
选择项目(位置);
}
});
返回drawerGridView;
}
@凌驾
公共活动(最终活动){
超级转速计(活动);
试一试{
回调=(导航抽屉回调)活动;
抽屉布局=(抽屉布局)activity.findViewById(R.id.activity\u services\u抽屉布局);
navigationDrawerLayout=(FrameLayout)activity.findViewById(R.id.services\u navigation\u drawer\u layout);
drawerLayout.setDrawerShadow(R.drawable.drawer\u shadow,GravityCompat.START);
ActionBar ActionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(真);
DroperToggle=new ActionBarDrawerToggle(getActivity(),DroperLayout,R.string.app\u name,R.string.app\u name){
@凌驾
图纸上的公共空白已关闭(视图抽屉视图){
super.onDrawerClosed(抽屉视图);
Log.i(标记“抽屉已关闭!”);
如果(!isAdded()){
返回;
}
//activity.invalidateOptions菜单();
}
@凌驾
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
Log.i(标签“抽屉打开!”);
如果(!isAdded()){
返回;
}
如果(!userLearnedDrawer){
userLearnedDrawer=true;
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(活动);
SharedReferences.edit().putBoolean(PREF_USER_LEARNED_DRAWER,true).apply();
}
//activity.invalidateOptions菜单();
}
};
如果(!userLearnedDrawer&&!fromSavedInstance){
抽屉布局。打开抽屉(导航抽屉布局);
}
drawerLayout.post(新的Runnable(){
@凌驾
公开募捐{
drawerToggle.syncState();
}
});
抽屉布局。设置抽屉链接器(抽屉切换);
}catch(ClassCastException e){
抛出新的ClassCastException(activity.getClass()+“必须实现NavigationDrawerCallbacks接口”);
}
}
私有ActionBar getActionBar(){
返回getActivity().getActionBar();
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putInt(状态为所选位置,所选位置);
}
@凌驾
在PrepareOptions功能表(菜单)上公共作废{
super.onPrepareOptions菜单(菜单);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
如果(抽屉切换选项项选定(项目)){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
私有void selectItem(内部位置){
selectedPosition=位置;
如果(DroperGridView!=null){
DroperGridView.setItemChecked(位置,true);
}
if(抽屉布局!=null){
抽屉布局。关闭抽屉(导航抽屉布局);
}
if(回调!=null){
回调。onNavigationDrawerItemSelected(位置);
}
}
私有类ServicesAdapter扩展了基
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/services_navigation_drawer_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:choiceMode="multipleChoice"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="#EEE" />
public class MainActivity
extends Activity
implements BaseControllerFragment.ControllerCallbacks,
ServicesNavigationDrawerFragment.NavigationDrawerCallbacks {
public final static String TAG = "MainActivity";
LinearLayout titleBarLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.services_activity_main);
titleBarLayout = (LinearLayout) findViewById(R.id.title_bar_layout);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().add(R.id.services_navigation_drawer_layout,
new ServicesNavigationDrawerFragment(),
TAG + "." + ServicesNavigationDrawerFragment.TAG).commit();
}
@Override
public void updateTitleBar(View view) {
titleBarLayout.removeAllViews();
titleBarLayout.addView(view);
titleBarLayout.invalidate();
}
@Override
public void onNavigationDrawerItemSelected(int position) {
switch (position) {
case 0:
replaceContainerContents(new BuildLicenseControllerFragment());
return;
case 1:
replaceContainerContents(new BuildLicenseControllerFragment());
return;
}
}
private void replaceContainerContents(BaseControllerFragment controllerFragment) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.contents_layout,
controllerFragment,
TAG + "." + controllerFragment.TAG).commit();
}
}
public class ServicesNavigationDrawerFragment extends Fragment {
public final static String TAG = "ServicesNavigationDrawerFragment";
String[] titles = {
"String 1", // 0
"String 2" // 1
};
int[] images = {
R.drawable.service_build_license,
R.drawable.service_build_license
};
private final static String STATE_SELECTED_POSITION = "SELECTED_POSITION";
private final static String PREF_USER_LEARNED_DRAWER = "USER_LEARNED_DRAWER";
private int selectedPosition = 0;
private boolean fromSavedInstance;
private boolean userLearnedDrawer;
GridView drawerGridView;
DrawerLayout drawerLayout;
FrameLayout navigationDrawerLayout;
ActionBarDrawerToggle drawerToggle;
private NavigationDrawerCallbacks callbacks;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
userLearnedDrawer = sharedPreferences.getBoolean(PREF_USER_LEARNED_DRAWER, false);
if(savedInstanceState != null) {
selectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
fromSavedInstance = true;
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
drawerGridView = (GridView) inflater.inflate(R.layout.services_fragment_navigation_drawer, container, false);
drawerGridView.setAdapter(new ServicesAdapter(titles, images));
drawerGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
return drawerGridView;
}
@Override
public void onAttach(final Activity activity) {
super.onAttach(activity);
try {
callbacks = (NavigationDrawerCallbacks) activity;
drawerLayout = (DrawerLayout) activity.findViewById(R.id.activity_services_drawer_layout);
navigationDrawerLayout = (FrameLayout) activity.findViewById(R.id.services_navigation_drawer_layout);
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Log.i(TAG, "Drawer Closed!");
if (!isAdded()) {
return;
}
// activity.invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Log.i(TAG, "Drawer Opened!");
if (!isAdded()) {
return;
}
if( ! userLearnedDrawer) {
userLearnedDrawer = true;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
sharedPreferences.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
}
// activity.invalidateOptionsMenu();
}
};
if( ! userLearnedDrawer && ! fromSavedInstance) {
drawerLayout.openDrawer(navigationDrawerLayout);
}
drawerLayout.post(new Runnable() {
@Override
public void run() {
drawerToggle.syncState();
}
});
drawerLayout.setDrawerListener(drawerToggle);
} catch(ClassCastException e) {
throw new ClassCastException(activity.getClass() + " must implements NavigationDrawerCallbacks interface.");
}
}
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, selectedPosition);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
private void selectItem(int position) {
selectedPosition = position;
if(drawerGridView != null) {
drawerGridView.setItemChecked(position, true);
}
if(drawerLayout != null) {
drawerLayout.closeDrawer(navigationDrawerLayout);
}
if(callbacks != null) {
callbacks.onNavigationDrawerItemSelected(position);
}
}
private class ServicesAdapter extends BaseAdapter {
public final static String TAG = "ServicesAdapter";
private Context context;
private LayoutInflater inflater;
private String[] titles;
private int[] images;
private ServicesAdapter(String[] titles, int[] images) {
if(titles.length != images.length) {
throw new RuntimeException("You Must Provide Same Number of Titles and Images.");
}
context = getActivity();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.titles = titles;
this.images = images;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return titles[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = null;
if(convertView != null) {
textView = (TextView) convertView;
} else {
textView = (TextView) inflater.inflate(R.layout.services_layout_drawer_item, parent, false);
}
Log.i(TAG, textView.getCompoundDrawables()[1].getBounds().toString());
Drawable drawable = context.getResources().getDrawable(images[position]);
drawable.setBounds(new Rect(0, 0, 128, 128));
textView.setText(titles[position]);
textView.setCompoundDrawables(null, drawable, null, null);
return textView;
}
}
public interface NavigationDrawerCallbacks {
public void onNavigationDrawerItemSelected(int position);
}
}
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Log.i(TAG, "Drawer Closed!");
if (!isAdded()) {
return;
}
// activity.invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Log.i(TAG, "Drawer Opened!");
if (!isAdded()) {
return;
}
if( ! userLearnedDrawer) {
userLearnedDrawer = true;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
sharedPreferences.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
}
// activity.invalidateOptionsMenu();
}
};
if( ! userLearnedDrawer && ! fromSavedInstance) {
drawerLayout.openDrawer(navigationDrawerLayout);
}
drawerLayout.post(new Runnable() {
@Override
public void run() {
drawerToggle.syncState();
}
});
drawerLayout.setDrawerListener(drawerToggle);
} catch(ClassCastException e) {
throw new ClassCastException(activity.getClass() + " must implements NavigationDrawerCallbacks interface.");
}
}
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, selectedPosition);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}a
mDrawerToggle = new ActionBarDrawerToggle(
getActivity(), /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) {
return;
}
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) {
return;
}
if (!mUserLearnedDrawer) {
// The user manually opened the drawer; store this flag to prevent auto-showing
// the navigation drawer automatically in the future.
mUserLearnedDrawer = true;
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(getActivity());
sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
}
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};