我正在尝试动态地向片段中的表添加行。 但是,我面临一些运行时错误,并且非常需要一些建议。
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
2)E/AndroidRuntime(1038): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
3)E/AndroidRuntime(1038):at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)
FragmentTwo.Java
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>
答案 0 :(得分:1)
更改此
TableLayout tl=(TableLayout) getActivity().findViewById(R.id.mainLayout);
到
TableLayout tl=(TableLayout) view.findViewById(R.id.mainLayout);
这是一个避免NullPointerException
的错误。
并使用getActivity()
初始化视图。要知道为什么阅读
答案 1 :(得分:1)
我遇到了同样的问题,这是因为我传递了应用程序上下文而不是活动上下文。
TableRow tr = new TableRow(getActivity());
TextView textview1 = new TextView(getActivity());
textview1.setText("unhappy");
tr.addView(textview1);
TextView textview2 = new TextView(getActivity());
textview2.setText("happy");
tr.addView(textview2);
你也应该阅读这个
Android: How to track down the origin of a InflateException?