一般來說,獲取當(dāng)前活動中的某一個視圖還是很方便的,我們在使用onClick函數(shù)的時候經(jīng)常會見到這樣的用法:
@Override
public void onClick(View v) {
Snackbar.make(v, "真的要刪除全部數(shù)據(jù)嗎?", Snackbar.LENGTH_SHORT)
.setAction("是噠!", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.deleteAllTips();
refreshTips();
Toast.makeText(MainActivity.this, "已經(jīng)刪除", Toast.LENGTH_SHORT).show();
}
}).show();
}
我們注意到,make函數(shù)的第一個參數(shù)是v,這可以是當(dāng)前布局的任意一個View,Snackbar會使用這個View來找到最外層的布局從而展示Snackbar。但是我們有的時候并不是使用onClick函數(shù)來調(diào)用Snackbar。例如我們會在onOptionsItemSelected函數(shù)中使用Snackbar。此時,我們可以借用下列方法獲取View視圖:
getWindow().getDecorView().findViewById(Android.R.id.content)
就上述例子來說,可以修改為這樣:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
//TODO 刪除本地數(shù)據(jù)
Snackbar.make(getWindow().getDecorView().findViewById(R.id.delete), "真的要刪除全部數(shù)據(jù)嗎?", Snackbar.LENGTH_SHORT)
.setAction("是噠!", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.deleteAllTips();
refreshTips();
Toast.makeText(MainActivity.this, "已經(jīng)刪除", Toast.LENGTH_SHORT).show();
}
}).show();
break;
default:
//TODO 黑人困惑......
Toast.makeText(this,"default",Toast.LENGTH_LONG).show();
}
return true;
}
就是這樣啦,蟹蟹大家的閱讀!