我有一个实现OnClickListener的活动,我正在处理onclick事件,如下面的代码:
void onClick(View v){
final int id = v.getId();
switch(id){
case R.id.xxx:
break;
}
}
现在我还有一个工具栏,所以我也想以这种方式处理工具栏导航按钮点击事件:
toolbar.setNavigationOnClickListener(this);
但我不知道工具栏导航按钮的ID。我怎么能得到它?
答案 0 :(得分:1)
如果工具栏被用作ActionBar,则视图ID将为android.R.id.home
,您可以使用onOptionsItemSelected(...)
知道何时按下它。
如果它没有用作ActionBar,则视图id为-1,没有定义相应的id资源。
这意味着您必须使用setNavigationOnClickListener()
,但要采用以下两种方法之一:
或者:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
...
}
});
或
private View.OnClickListener homeClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
...
}
};
@Override
protected void onCreate(...) {
...
toolbar.setNavigationOnClickListener(homeClickListener);
...
}
答案 1 :(得分:0)
只需打印日志即可获取ID,例如:Log.w("ID: ", ""+v.getId());
在我的情况下是-1值。
switch(id)
{
case -1:
break;
}
答案 2 :(得分:0)
当您 Toolbar.setNavigationIcon()
时,按钮(汉堡包图标)具有 NO_ID。
这就是为什么 View.getId()
在 -1
中返回 onClickLister
作为@Adolfok3 回答的原因。
public int getId()
返回此视图的标识符。
退货
int 一个正整数,用于标识视图或 NO_ID 如果视图 没有身份证
https://developer.android.com/reference/android/view/View#NO_ID
<块引用>public static final int NO_ID
用于标记没有 ID 的 View。
常量值:-1 (0xffffffff)