android-如何检查布局中是否存在TextView?
我有两种不同的布局,比如android-如何检查布局中是否存在TextView?,android,android-layout,Android,Android Layout,我有两种不同的布局,比如layou1.xml和layou2.xml。两个版面中的元素相同,但layout_2.xml还有一个额外的TextView 根据我的需要,只调用一个布局。我想检查textView是否在布局中可用 如果TextView可用,它应该执行TextView.setText(),否则将调用其他布局 请参考以下代码: @Override public void onBindViewHolder(SingleItemRowHolder holder, int i) { Sing
layou1.xml
和layou2.xml
。两个版面中的元素相同,但layout_2.xml
还有一个额外的TextView
根据我的需要,只调用一个布局。我想检查textView是否在布局中可用
如果TextView可用,它应该执行TextView.setText()
,否则将调用其他布局
请参考以下代码:
@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {
SingleItemModel singleItem = itemsList.get(i);
holder.tvTitle.setText(singleItem.getName());
Picasso.with(mContext).load(singleItem.getUrl()).into(holder.itemImage);
if (holder.lblDescription.getVisibility() == View.VISIBLE){
holder.lblDescription.setText(singleItem.getDescription());
}
}
文本视图holder.lblDescription
位于layout_2.xml
中,但不在layout_1.xml
中
因此,layout_2.xml
运行起来很轻松,但是当它调用layout_1.xml
时,它会给我这个错误试图在空对象引用上调用虚拟方法“java.lang.Class java.lang.Object.getClass()。
我知道,我执行的检查是错误的。所以,我需要帮助
提前谢谢 您得到了一个空指针异常,因为
lblDescription
没有绑定到layou 1.xml
中不存在的任何内容。所以基本上你能做的就是检查
if(hold.lblDescription != null){
holder.lblDescription.setText(singleItem.getDescription());
}
而不是
if (holder.lblDescription.getVisibility() == View.VISIBLE){
holder.lblDescription.setText(singleItem.getDescription());
}
/**
*检查文本视图是否存在
*
*@param group:父布局id
*/
公共布尔值isTextViewPresent(视图组)
{
int count=group.getChildCount();
观点五;
for(int i=0;i
检查@NileshRathod我无法理解“findViewById(您的视图id)”如何帮助在布局中查找文本视图。如果您有一个小例子,它可能对我有帮助。谢谢如果我没有误解您的问题,您的意思是检查视图是否在屏幕上可见?例如,您有一个scrollview,如果视图在屏幕上还不可见,则该视图将返回false;isTextViewPresent((ViewGroup)v)
如果由于其返回值被忽略而在此处不执行任何操作,则调用您的,否则此代码将不起作用。@Twometer,isTextViewPresent((ViewGroup)v);我知道,调用此函数是为了检查嵌套布局中的textview,但此检查的结果完全被忽略。如果(isTextViewPresent((ViewGroup)v);)返回true,则将其更改为代码>。使用此代码,您不再忽略检查,并且如果首先有一个不包含TextView的视图组,然后有一个包含TextView的视图组,您也不会中断for循环。@Twometer您完全错了,提供的代码没有问题<代码>isTextViewPresent((视图组)v)代码>返回布尔值及其不被忽略
/**
* check textview is present or not
*
* @param group : parent layout id
*/
public boolean isTextViewPresent(ViewGroup group)
{
int count = group.getChildCount();
View v;
for (int i = 0; i < count; i++)
{
v = group.getChildAt(i);
if (v instanceof TextView)
{
return true;
} else if (v instanceof ViewGroup)
isTextViewPresent((ViewGroup) v);
}
return false;
}