项目场景:
开发APP时,想动态添加fragment,但无法在继承了FragmentActivity的活动中获取Fragment中的按钮控件。
问题描述
代码加粗区域总是显示空指针异常:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference.
public class MainActivity extends FragmentActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View view = findViewById(R.id.left_fragment); Button button = view.findViewById(R.id.button); button.setOnClickListener(this); replaceFragment(new RightFragment()); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button: replaceFragment(new AnotherRightFragment()); break; default: break; } } }
原因分析:
好像是和活动的生命周期有关,不能在onCreate里寻找控件。
解决方案:
把onCreate中寻找控件的代码改一下并放在onStart中就成功了!
public class MainActivity extends FragmentActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); replaceFragment(new RightFragment()); } @Override protected void onStart() { super.onStart(); Button button= getSupportFragmentManager().findFragmentById(R.id.left_fragment).getView().findViewById(R.id.button); button.setOnClickListener(this); } }