android中碎片事务的Nullpointer异常 我有一个简单的程序来执行片段替换,得到 此日志错误…如何克服此错误 我在这里使用newInstance
MainActivity.javaandroid中碎片事务的Nullpointer异常 我有一个简单的程序来执行片段替换,得到 此日志错误…如何克服此错误 我在这里使用newInstance,android,android-fragments,Android,Android Fragments,MainActivity.java public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Fir
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//First fragment should be mounted on oncreate of main activity
if (savedInstanceState == null) {
Fragment newFragment = FragmentOne.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, newFragment).addToBackStack(null).commit();
}
}
}
public class FragmentOne extends Fragment{
Button btn;
public static FragmentOne newInstance(){
FragmentOne fragment = new FragmentOne();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_one, container, false);
btn=(Button) getActivity().findViewById(R.id.button1);
return view;
}
@Override
public void onStart() {
super.onStart();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getActivity().getSupportFragmentManager();
Fragment frgObj=FragmentOne.newInstance();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, frgObj,"FragmentOne");
ft.addToBackStack(null);
ft.commit();
}
});
}
}
FragmentOne.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//First fragment should be mounted on oncreate of main activity
if (savedInstanceState == null) {
Fragment newFragment = FragmentOne.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, newFragment).addToBackStack(null).commit();
}
}
}
public class FragmentOne extends Fragment{
Button btn;
public static FragmentOne newInstance(){
FragmentOne fragment = new FragmentOne();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_one, container, false);
btn=(Button) getActivity().findViewById(R.id.button1);
return view;
}
@Override
public void onStart() {
super.onStart();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getActivity().getSupportFragmentManager();
Fragment frgObj=FragmentOne.newInstance();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, frgObj,"FragmentOne");
ft.addToBackStack(null);
ft.commit();
}
});
}
}
活动\u main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/container">
</LinearLayout>
您的
片段
视图
未附加到onCreateView()方法上的活动
,因此btn
为null
换行
btn=(Button) getActivity().findViewById(R.id.button1);
进入
否则,将该行移动到onStart()
方法