我试图动态地向片段中的表添加行。但是,我遇到了一些运行时错误,非常需要一些建议。
Logcat:
1)E/AndroidRuntime(1038): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lol/com.example.lol.MainActivity}: android.view.InflateException: Binary XML file line #96: Error inflating class fragment
E/AndroidRuntime(1038): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lol/com.example.lol.MainActivity}: android.view.InflateException: Binary XML file line #96: Error inflating class fragment
2)E/AndroidRuntime(1038): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
E/AndroidRuntime(1038): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
3)E/AndroidRuntime(1038):at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)
E/AndroidRuntime(1038):at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)
片段二
import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.EditText; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; public class FragmentTwo extends Fragment { @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_two, container, false); TableLayout tl=(TableLayout) getActivity().findViewById(R.id.mainLayout); TableRow tr = new TableRow(getActivity().getApplicationContext()); // tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView textview1 = new TextView(getActivity().getApplicationContext()); textview1.setText("unhappy"); tr.addView(textview1); TextView textview2 = new TextView(getActivity().getApplicationContext()); textview2.setText("happy"); tr.addView(textview2); tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); return view; }
MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void selectFrag(View view) { Fragment fr; if(view == findViewById(R.id.button2)) { fr = new FragmentTwo(); }else { fr = new FragmentOne(); } FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); fragmentTransaction.commit(); } }
fragment_two.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" android:background="#ffff00"> <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mainLayout"> <TableRow android:id="@+id/infoRow" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="Unhappy" android:id="@+id/column1" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <TextView android:text="Happy" android:id="@+id/column2" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </TableRow> </TableLayout> </LinearLayout>
改变这个
TableLayout tl=(TableLayout) getActivity().findViewById(R.id.mainLayout);
至
TableLayout tl=(TableLayout) view.findViewById(R.id.mainLayout);
这是避免的一个错误NullPointerException。
NullPointerException
并用于getActivity()初始化视图。要知道为什么要读
getActivity()
何时调用活动上下文或应用程序上下文?