安卓开发之在当前Activity获取视图View

一般来说,获取当前活动中的某一个视图还是很方便的,我们在使用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;
    }

就是这样啦,蟹蟹大家的阅读!

你可能感兴趣的:(安卓开发之在当前Activity获取视图View)