片段:RelativeLayout可见性在OnCreateView中无法更改

时间:2017-07-12 14:35:15

标签: android android-fragments kotlin

(我用Kotlin) 所以这是片段中的OnCreateView。

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view: View = inflater!!.inflate(R.layout.fragment_bots, container, false)

        BotDiv2.visibility = View.VISIBLE
        startUp()
        return view
    }

,这是relativelayout的xml:

<RelativeLayout
                android:id="@+id/BotDiv2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="33.3"
                android:visibility="invisible">

                <ImageButton
                    android:id="@+id/BotBtn1"
                    android:layout_width="90dp"
                    android:layout_height="90dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@null"
                    android:scaleType="fitCenter"
                    android:src="@android:drawable/btn_star_big_on" />

                <TextView
                    android:id="@+id/uselessLevel1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_above="@+id/BotBtn1"
                    android:layout_alignStart="@+id/BotBtn1"
                    android:text="Level:" />

                <TextView
                    android:id="@+id/BotWorth1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/BotBtn1"
                    android:layout_centerHorizontal="true"
                    android:text="$500"
                    android:textAppearance="@style/TextAppearance.AppCompat.Large" />

                <TextView
                    android:id="@+id/levelBot1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_above="@+id/BotBtn1"
                    android:layout_alignEnd="@+id/BotBtn1"
                    android:text="1" />

            </RelativeLayout>

想在另一个函数中使用它,但是这个:

BotDiv2.visibility = View.VISIBLE

导致NPE我也尝试使用findViewById,但这也会导致NPE(或者不影响,因为Kotlin的“?”)。

1 个答案:

答案 0 :(得分:2)

除了上面的评论中提到的ID似乎不正确之外......

由于在此阶段您的View尚未设置Fragment(您尚未将其返回到框架中),因此您无法在{findViewById上调用Fragment 1}}本身,但您可以对新增的findViewById进行View调用:

val view: View = inflater!!.inflate(R.layout.fragment_bots, container, false)
val bd2 = view.findViewById(R.id.BotDiv2)
bd2.visibility = View.VISIBLE

如果您正在使用Kotlin Android Extensions,您可以使用以下语法执行相同的操作:

val view: View = inflater!!.inflate(R.layout.fragment_bots, container, false)
view.BotDiv2.visibility = View.VISIBLE