Android设计库Snackbar-获取TextView返回空值

Android设计库Snackbar-获取TextView返回空值,android,android-design-library,android-snackbar,Android,Android Design Library,Android 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); 运行上述操作总是将

我正在尝试获取
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
设置为空。我使用的是设计库版本
23.0.0
,在snackbar的布局资源中,我可以看到id为
snackbar\u text的
TextView
。我缺少什么?

以下代码应该可以工作:

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();

我也有同样的问题,可以通过不使用android.support.design.R.id.snackbar_文本中的id来解决

如果查看设计支持库的源代码,可以看到
R.id.snackbar\u text
设置为:

public static final int snackbar_text = 0x7f0c006b;
如果查看应用程序中android.support.design.R.id.snackbar\u text的值,您可以看到该值为:

public static final int snackbar_text = 0x7f0b006b;

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

只有在我添加了具有设计支持依赖项的库模块并从主模块中删除了设计支持依赖项后,才会出现此问题。 我在我的主模块中再次添加了设计支持gradle依赖项,它可以正常工作

这意味着在主模块“app”和助手库模块(在我的“app”中添加为库)中都添加了以下依赖项:

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

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

但我仍然不知道为什么在两个模块中添加了设计支持依赖项后它会起作用,而如果我只在库模块中添加依赖项,它应该会起作用,而我正在为我的“应用”模块添加库模块?有人能帮我理解吗?提前谢谢

对于那些在这方面找不到最新答案的人,我在这里提供帮助。

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

android.support.design.R.id.snackbar\u text

此后,它被以下内容取代:

com.google.android.material.R.id.snackbar\u 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...

它工作正常。再试一次。检查
Snackbar.make(mRecyclerView,message,Snackbar.LENGTH\u LONG)必须传递xml的父对象。您应该在代码中选中
mRecyclerView
。哪个父对象?片段布局?活动布局?是,如果在片段中使用,则获取
my\u frugment.xml的主父对象(第一个布局);如果在活动中使用,则获取主父对象(第一个布局)您的
my_activity.xml
的对象我已将MRECyclView更改为片段的根视图-仍然存在相同的问题请使用activity的根视图进行尝试。不确定您是否正确读取了该答案。在调用.show()方法之前,他们还得到了
TextView
。这是适合我的代码(在
Fragment
中):
View-containerView=inflater.inflate(R.layout.Fragment\u-foo,container,false);Snackbar Snackbar=Snackbar.make(containerView,“Snackbar文本”,Snackbar.LENGTH\u SHORT);视图snackbar视图=snackbar.getView();TextView TextView=(TextView)snackbarView.findviewbyd(android.support.design.R.id.snackbar_text);setText(“它有效”);snackbar.show()否,这不正确。你肯定,100%不想从碎片中膨胀你的碎片。您应该能够提供Snackbar的任何视图,Snackbar将自己搜索根父级。为什么不在片段本身中膨胀片段??看右边。。。只有在库模块中使用设计支持库时,才会出现此问题,但您的解决方案不适用于我。我尝试用R.id.snackbar_文本替换android.support.design.R.id.snackbar_文本,代码编译很好,但textview仍然运行空。阅读我下面的答案,了解我是如何解决这个问题的。我编写了一个小库来设计snackbar,它看起来像是使用R.id.snackbar_text使用support design lib 23.4.0。代码可在“谢谢”网站获得!谢谢谢谢你帮了我很大的忙:)。
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...