android - 如何检查布局中是否存在TextView?

时间:2017-09-07 07:14:14

标签: android android-layout

我有两种不同的布局,比如说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.

我知道,我正在执行的检查是错误的。所以,我需要帮助。

提前致谢!

2 个答案:

答案 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;
    }