Android ViewFinder 方法

发布于 2024-04-18 04:35:18 字数 1832 浏览 36 评论 0

在 Android 获取一个 View 一般都是通过如下方式:

TextView textView = (TextView) findViewById(R.id.textview);

相信大家都写过无数次 findViewById 了吧,每次都要 Cast 一下是否很不爽啊。今天就来介绍三种简便的方法避免这种 Cast

第一种

在项目基类 BaseActivity 中添加如下函数:

@SuppressWarnings(“unchecked”)
public final <E extends View> E getView (int id) {
    try {
        return (E) findViewById(id);
    } catch (ClassCastException ex) {
        Log.e(TAG, “Could not cast View to concrete class.”, ex);
        throw ex;
    }
}

然后就可以通过如下方式获取 View 了:

TextView textView = getView(R.id.textview);
Button button = getView(R.id.button);
ImageView image = getView(R.id.imageview);
注意:如果级联调用 getView 函数,则还是需要 Cast 的,如下示例:
private static void myMethod (ImageView img) {
    //Do nothing
}
@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myMethod(getView(R.id.imageview)); //这样无法通过编译
    myMethod((ImageView) getView(R.id.imageview)); //需要 Cast 才可以
}

第二种

第一种方法只在 Activity 里有效,其实我们经常在其他 View 或者 Fragment 里也常用 findViewById 方法,当然你可以把上述方法 copy 一遍,但是这违反了面向对象基本的封装原则,有大神封装了一个 ViewFinder 类,具体代码可以见我 Gist 上的文件 ViewFinder.java , 使用的时候你只需要在你的 Activity 或者 View 里这样使用:

ViewFinder finder = new ViewFinder(this);
TextView textView = finder.find(R.id.textview);

第三种

前两种方法本质上是利用了泛型,还有一种利用注解的方式,使用起来更方便,不仅省事的处理了 findViewById,甚至包括 setOnClickListener 这种方法也能很方便的调用 。

注意:如果你是使用的 Eclipse 引用该 library,你需要参考这里 Eclipse Configuration 做一些配置,否则会运行出错。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

傾旎

暂无简介

文章
评论
25 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文