安卓中通过FragmentActivity获取Fragment中控件的方法

发布于:2022-12-13 ⋅ 阅读:(1008) ⋅ 点赞:(0)

项目场景:

开发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);
    }
    
}

网站公告

今日签到

点亮在社区的每一天
去签到