一般来说,获取当前活动中的某一个视图还是很方便的,我们在使用onClick函数的时候经常会见到这样的用法:
@Override
public void onClick(View v) {
Snackbar.make(v, "真的要删除全部数据吗?", Snackbar.LENGTH_SHORT)
.setAction("是哒!", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.deleteAllTips();
refreshTips();
Toast.makeText(MainActivity.this, "已经删除", Toast.LENGTH_SHORT).show();
}
}).show();
}
我们注意到,make函数的第一个参数是v,这可以是当前布局的任意一个View,Snackbar会使用这个View来找到最外层的布局从而展示Snackbar。但是我们有的时候并不是使用onClick函数来调用Snackbar。例如我们会在onOptionsItemSelected函数中使用Snackbar。此时,我们可以借用下列方法获取View视图:
getWindow().getDecorView().findViewById(Android.R.id.content)
就上述例子来说,可以修改为这样:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
//TODO 删除本地数据
Snackbar.make(getWindow().getDecorView().findViewById(R.id.delete), "真的要删除全部数据吗?", Snackbar.LENGTH_SHORT)
.setAction("是哒!", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.deleteAllTips();
refreshTips();
Toast.makeText(MainActivity.this, "已经删除", Toast.LENGTH_SHORT).show();
}
}).show();
break;
default:
//TODO 黑人困惑......
Toast.makeText(this,"default",Toast.LENGTH_LONG).show();
}
return true;
}
就是这样啦,蟹蟹大家的阅读!
网友评论