gpt4 book ai didi

java - 从 Activity 调用 fragment 方法的问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:46 28 4
gpt4 key购买 nike

我对称为表单 Activity 的 fragment 方法有疑问。为了创建 fragment 并调用该方法,我使用位于 MainActivity.java 中的此方法:

public void createFragment (int select, String string) {
switch (select) {
case 1:
ErrorFragment errorFragment = new ErrorFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragError, errorFragment)
.commit();

errorFragment = (ErrorFragment) getSupportFragmentManager().findFragmentById(R.id.fragError);

errorFragment.setText(string);

break;
case 2:
StringFragment stringFragment = new StringFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragString, stringFragment)
.commit();

stringFragment = (StringFragment) getSupportFragmentManager().findFragmentById(R.id.fragString);

stringFragment.setText(string);

break;
}
}

除了 textView 的名称和布局之外,这些 fragment 具有相同的布局和类。

ErrorFragment.java:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ErrorFragment extends Fragment {

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_error,container,false);
}

public void setText(String text) {
TextView textView = (TextView) getActivity().findViewById(R.id.errorOut);
textView.setText(text);
}
}

fragment_error.xml

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

<TextView
android:id="@+id/errorTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/error"
android:textColor="#FF0000"
android:textSize="25sp"
android:gravity="center|top"/>

<TextView
android:id="@+id/errorOut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="20sp"
android:text=""
android:gravity="center|top"/>
</LinearLayout>

createFragment() 被一些按钮调用

经过一些测试,我注意到 fragment 已创建,但是当我调用“errorFragment.setText;”时应用程序崩溃。在情况 2 中,应用程序不会崩溃,但不会显示 TextView (我注意到,如果我快速单击按钮, TextView 会出现几毫秒)

编辑:我尝试这样做,但应用程序仍然崩溃

最佳答案

似乎您尝试将文本设置到的 TextView 位于 fragment 布局中。您应该在两个 fragment 中都这样做。

您尝试将文本设置到 TextView 中的方式,android 试图在 Activity 布局中而不是在 fragment 布局中找到它。这就是您的应用崩溃的原因(可能是 NullPointerException)

private View view = null;
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_error,container,false);
return view;
}

public void setText(String text) {
TextView textView = (TextView) view.findViewById(R.id.errorOut);
textView.setText(text);
}

关于java - 从 Activity 调用 fragment 方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350668/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com