Android设计库Snackbar - 获取TextView返回Null

时间:2016-04-07 11:08:44

标签: android android-design-library snackbar

我试图抓住Snackbar TextView。这是我使用的代码:

 Snackbar snackbar = Snackbar.make(mRecyclerView, message, Snackbar.LENGTH_LONG);
 View view = snackbar.getView();
 TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);

运行上述内容始终将tv设置为null。我使用设计库版本23.0.0,在小吃栏的布局资源中,我可以看到TextView的ID为snackbar_text。我错过了什么?

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并且能够通过不使用 android.support.design.R.id.snackbar_text 中的ID来修复它。

如果查看设计支持库的来源,可以看到R.id.snackbar_text设置为:

public static final int snackbar_text = 0x7f0c006b;

如果您在应用中查看android.support.design.R.id.snackbar_text的值,可以看到该值为:

public static final int snackbar_text = 0x7f0b006b;

对我来说,只有在库模块中使用设计支持库时才会出现此问题。

答案 1 :(得分:1)

以下代码应该有效:

View containerView = inflater.inflate(R.layout.fragment_foo, container, false); 
Snackbar snackbar = Snackbar.make(containerView, "snackbar text", Snackbar.LENGTH_SHORT); 
View snackbarView = snackbar.getView(); 
TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
text.setText("It works"); snackbar.show();

答案 2 :(得分:0)

这个问题出现在我添加了具有Design支持依赖性的库模块之后,我从主模块中删除了设计支持依赖项。 我在主模块中再次添加了设计支持gradle依赖,它可以工作!

这意味着在主模块“app”和辅助库模块中添加了以下依赖项,该模块在我的“app”中作为库添加:

compile "com.android.support:design:$project.ext.supportLibraryVersion"

其中project.ext.supportLibraryVersion在我的app.build.gradle中定义如下:

allprojects {
    project.ext {
    supportLibraryVersion="23.3.0"
    }
}

但是我仍然不确定为什么它在两个模块中添加设计支持依赖项之后才能工作,而如果我只在库模块中添加依赖项我应该有效,我无论如何都要添加为我的“app”模块的库?任何人都可以帮我理解这个吗?提前谢谢!

答案 3 :(得分:0)

对于那些来这里却找不到最新答案的人,我在这里为您提供帮助。

许多示例显示了此res id的用法:

android.support.design.R.id.snackbar_text

此后已被替换为:

com.google.android.material.R.id.snackbar_text

示例:

Snackbar snackbar = Snackbar.make( /*however you decide to make it*/ );
View view = snackbar.getView();
TextView tv = (TextView)view.findViewById(android.support.design.R.id.snackbar_text);
//make your needed changes...