我有两种不同的布局,比如说layout_1.xml
& layout_2.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());
}
}
TextView holder.lblDescription
位于layout_2.xml
,但layout_1.xml
中不存在。
因此,layout_2.xml
正在轻松投放,但当它调用layout_1.xml
时,它会给我这个错误Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference.
我知道,我正在执行的检查是错误的。所以,我需要帮助。
提前致谢!
答案 0 :(得分:4)
嗯,你得到一个空指针异常,因为lblDescription
并没有绑定到它不存在的layout_1.xml
中的任何内容。所以你基本上可以做的就是检查
if(hold.lblDescription != null){
holder.lblDescription.setText(singleItem.getDescription());
}
而不是
if (holder.lblDescription.getVisibility() == View.VISIBLE){
holder.lblDescription.setText(singleItem.getDescription());
}
答案 1 :(得分:-1)
/**
* 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;
}