我遇到了称为表单活动的片段方法的问题。 为了创建片段并调用方法,我使用位于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;
}
}
除了textViews和layout的名称之外,片段具有相同的布局和类。
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()经过一些测试后,我注意到片段已创建,但是当我调用“errorFragment.setText;”时应用程序崩溃。 在案例2中,应用程序不会崩溃,但文本视图不会显示(我注意到,如果我快速单击按钮,textView会显示几毫秒)
编辑: 我尝试这样做,但应用程序仍然崩溃
答案 0 :(得分:0)
似乎您尝试将文本设置为的TextView
位于片段布局中。你应该在你的两个片段中这样做。
你试图在文本视图中设置文本的方式,android试图在活动的布局中找到它,而不是在片段的布局中。这就是您的应用崩溃的原因(可能是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);
}
答案 1 :(得分:0)
我认为@ Rohit5k2在他的解释中是正确的,但不是在视图中夸大片段布局,而是应该使用XML文件中的相同布局,在您的情况下是一个LinearLayout。
所以试试这个:
private LinearLayout layout = null;
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
layout = (LinearLayout) inflater.inflate(R.layout.fragment_error,container,false);
return layout;
}
public void setText(String text) {
TextView textView = (TextView) layout.findViewById(R.id.errorOut);
textView.setText(text);
}