我已经实现了最新的appcompat库,并使用工具栏作为操作栏。但问题是我无法捕捉主页按钮/汉堡包图标点击事件。我试过了,看了所有的东西,但似乎没有发现类似的问题。
这是我的活动
类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Set up the drawer.
navDrawerFragment =
(NavigationDrawerFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_drawer);
navDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout),
toolbar);
}
这是我的NavigationDrawerFrament类:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
currentSelectedPosition = savedInstanceState.getInt(
STATE_SELECTED_POSITION);
fromSavedInstanceState = true;
}
// Select either the default item (0) or the last selected item.
selectItem(currentSelectedPosition);
}
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Indicate that this fragment would like
// to influence the set of actions in the action bar.
setHasOptionsMenu(true);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
drawerListView = (ListView) inflater.inflate(
R.layout.fragment_navigation_drawer, container, false);
drawerListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
selectItem(position);
}
});
//mDrawerListView.setAdapter();
//mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
return drawerListView;
}
public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
fragmentContainerView = getActivity().findViewById(fragmentId);
this.drawerLayout = drawerLayout;
// set a custom shadow that overlays the main
// content when the drawer opens
drawerLayout.setDrawerShadow(
R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view
// with items and click listener
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the navigation drawer and the action bar app icon.
drawerToggle = new ActionBarDrawerToggle(
getActivity(),
drawerLayout,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
// If the user hasn't 'learned' about the drawer,
// open it to introduce them to the drawer,
// per the navigation drawer design guidelines.
if (!userLearnedDrawer && !fromSavedInstanceState) {
drawerLayout.openDrawer(fragmentContainerView);
}
// Defer code dependent on restoration of previous instance state.
drawerLayout.post(new Runnable() {
@Override
public void run() {
drawerToggle.syncState();
}
});
drawerLayout.setDrawerListener(drawerToggle);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, currentSelectedPosition);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Forward the new configuration the drawer toggle component.
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("cek", "item selected");
if (drawerToggle.onOptionsItemSelected(item)) {
Log.d("cek", "home selected");
return true;
}
return super.onOptionsItemSelected(item);
}
当我单击菜单项时,会调用日志“item selected”。但当我点击home按钮时,它会打开导航抽屉,但从未调用“home selected”日志。我也在我的活动中设置了选项项选择方法,但它仍然没有被调用。
这就是我如何返回到正确的片段的方法,否则,如果在同一级别上有多个片段,如果不重写工具栏后退按钮的行为,它将返回到第一个片段。
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
mActionBarDrawerToggle = mNavigationDrawerFragment.getActionBarDrawerToggle();
mActionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// event when click home button
}
});
在我的情况下,这段代码工作完美
如果您想知道何时单击home是一个活动,那么您应该这样尝试:
首先告诉Android你想用你的工具栏作为你的动作栏:
setSupportActionBar(toolbar);
然后通过如下方式设置Home以显示:
getSupportActionBar().setDisplayShowHomeEnabled(true);
最后,在android上收听点击事件。R、 id.home像往常一样:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == android.R.id.home) {
Timber.d("Home pressed");
}
return super.onOptionsItemSelected(menuItem);
}
如果您想知道何时在除AppCompatActivity之外的类中单击工具栏上的导航按钮,可以使用这些方法设置导航图标并侦听其上的单击事件。导航图标将出现在您的工具栏的左侧,其中“主页”按钮曾经所在的位置。
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_nav_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("cek", "home selected");
}
});
如果你想知道汉堡什么时候被点击,抽屉什么时候打开,你已经在通过onDrawerOpened和onDrawerClosed监听这些事件了,所以你想看看这些回调是否符合你的要求。
本文向大家介绍Android中捕捉menu按键点击事件的方法,包括了Android中捕捉menu按键点击事件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android中捕捉menu按键点击事件的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Android程序设计有所帮助。
我正在尝试通过xpath,css,ID...但什么都管用。 我总是得到错误:没有这样的元素:无法定位元素 我添加了一个明确的等待,但它仍然不起作用。 你能帮帮我吗? 单选按钮
我试图用硒点击“下一页”按钮,但没有成功。我使用了正确的CSS选择器还是应该把它换成别的东西?
问题内容: 我几周前才开始使用SwiftUI,正在学习。今天,我遇到了一个问题。 当我显示一个带有navigationBarItems- button的工作表,然后关闭ModalView并返回到ContentView时,我发现自己无法再次单击navigationBarItems-button。 我的代码如下: 问题答案: 我认为发生这种情况是因为不是从演示者视图继承的,所以演示者不知道该模式已经关
在此对话框您可以指定当浏览磁盘文件夹 (“在压缩文件外部时显示”选项) 或查看压缩文件内容 (“在压缩文件内部时显示”选项 ) 时,要显示哪一些工具栏按钮。可以改变按钮的顺序,只要选择您希望移动的按钮并按下“上移”或“下移”来改变它们的位置。如果您要恢复默认工具栏配置,按下“默认”按钮。 “分隔符”按钮在选择的当前按钮前插入一个分隔符线。如果您要移除一个分隔符,或者取消它的选择状态,或者再次按下“