首页 > 解决方案 > 如何从另一个布局的片段中查找ViewById,而不是作为根布局膨胀的那个?

问题描述

我正在使用带有 ViewPager 的 Fragment,我需要从我的 Fragment 在 ViewPager 中设置文本,但我无法这样做,因为我不断得到:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

这就是我从 ViewPager 的 XML 文件中初始化 TextViews 的方式:

View root = inflater.inflate(R.layout.fragment_library, container, false);
.
.
contentHeading = root.findViewById(R.id.content_heading);
contentBody = root.findViewById(R.id.content_body);
.
. 
return root;

标签: javaandroidandroid-fragmentstextview

解决方案


无法从子布局直接访问。一个简单的方法是使用接口。您可以在 Fragment 构造函数中定义一个接口,然后在承载 viewPager 的根 Fragment 中实现它。

interface SomeInterface
{
public void callback (Type xxx)
}

父片段必须实现接口来监听任何回调

 ParentFragment implements SomeInterface
    {
    ...
         @override
         public void callBack(Type xxx)
         {
                //Change view pager 
         }
    }

然后将此片段作为侦听器传递给您的 viewpager 构造函数和 childFragment 构造函数。


推荐阅读