Kotlin, как установить tablayout внутри фрагмента (viewpager не работает) - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь создать tablayout внутри фрагмента. по некоторым причинам мой viewpager не работает должным образом. он продолжает отображать ту же ошибку, что и ниже

enter image description here

мои коды фрагментов и файлы XML ниже

package com.example.rsquare_android_fixed.mywork.building

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.example.rsquare_android_fixed.R
import kotlinx.android.synthetic.main.fragment_mywork.*


class MWFragment: Fragment(){
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        //val view=inflater.inflate(R.layout.fragment_mywork, container, false)

        Log.d("test","test")

        //vp_main.adapter=MW_Adapter(childFragmentManager)
        val fa=MW_Adapter(childFragmentManager)
        vp_main.adapter=fa
        tab_layout.setupWithViewPager(vp_main)

        return inflater.inflate(R.layout.fragment_mywork, container, false)
    }

}

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:theme="@style/TabTheme"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vp_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="hi"/>

</LinearLayout>

но если я попробую те же коды на mainacctivity, он будет работать хорошо ...

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Проблема в том, что расширение kotlin еще не знает о вашем представлении фрагментов, так как оно вызывает getView внутренне, чтобы найти представления во фрагменте, который возвращает null в точке, где вы используете. Попробуйте использовать vp_main in onViewCreated вместо onCreateView

0 голосов
/ 30 сентября 2019

Вы используете элемент макета перед инициализацией. В onCreateView() вы получаете доступ к элементу до inflating view.

. Вы можете переместить свой код val fa .. в код tab_layout в onCreatedView() или в oncreateView() первом раздувном справочнике вида. это к переменной, а затем инициализировать ваши tab_layout, vp_main по ссылке view. затем верните его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...