【问题标题】:How to findViewById in a Fragment from another layout, not the one inflated as the root layout?如何从另一个布局的片段中查找ViewById,而不是作为根布局膨胀的那个?
【发布时间】:2020-05-16 11:12:02
【问题描述】:

我正在使用带有 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;

【问题讨论】:

    标签: java android android-fragments textview


    【解决方案1】:

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

    interface SomeInterface
    {
    public void callback (Type xxx)
    }
    

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

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

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

    【讨论】:

    • 我还是 Android Studio 的新手,请您帮帮我好吗?我必须为此创建另一个片段吗?如何使用此片段设置侦听器?整个过程我还不清楚。
    • 我在这里找到了另一个答案。 stackoverflow.com/questions/39500413/…
    • 其实我想从包含viewpager的父片段改变我的viewpager
    • 不是相反
    • 您在哪里使用 findviewByid ?必须放在 onViewCreated()
    猜你喜欢
    • 2021-06-26
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2020-05-17
    相关资源
    最近更新 更多