Android 通过单击片段中的按钮来控制活动中按钮的设置

Android 通过单击片段中的按钮来控制活动中按钮的设置,android,android-fragments,nullpointerexception,Android,Android Fragments,Nullpointerexception,嗨 我正在制作一个有1个主要活动和3个片段的应用程序 在活动中,有一个片段显示另一个片段 它通过单击主活动中的按钮进行更改 有一个片段有一个按钮 我想当片段中的按钮被按下时,活动中的按钮将被禁用 有一个类似的问题和答案,所以我尝试了这个 UpdateButtonListener.java public interface UpdateButtonListener { void onUpdate(boolean status); } MainActivity.java public c

我正在制作一个有1个主要活动和3个片段的应用程序

在活动中,有一个片段显示另一个片段

它通过单击主活动中的按钮进行更改

有一个片段有一个按钮

我想当片段中的按钮被按下时,活动中的按钮将被禁用

有一个类似的问题和答案,所以我尝试了这个

UpdateButtonListener.java

public interface UpdateButtonListener {
    void onUpdate(boolean status);
}
MainActivity.java

public class MainActivity extends AppCompatActivity implements UpdateButtonListener{
public static UpdateButtonListener updateButton;
@Override
    public void onCreate(Bundle savedInstanceState) {
updateButton = this;
}

 @Override
    public void onUpdate(boolean status) {
        mBtn1.setEnabled(false);
        mBtn3.setEnabled(false);

    }
}
Fragment1.java

public class Fragment1 extends Fragment{
 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
View myView = inflater.inflate(R.layout.fragment_oper, container, false);

fBtn1 = (Button) myView.findViewById(R.id.fBtn1);
//fbtn1 = mStopBtn      
mStopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View myView) {
                MainActivity.updateButton.onUpdate(false);
            }
        });

}
当我运行应用程序时,出现了一个错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.Button.setEnabled(boolean)” 在com.example.samplecode4_3demo.FragmentMain.onUpdate(MainActivity.java:379)上 在com.example.samplecode4\u 3demo.FragmentOper$2.onClick(Fragment1.java:124)上

我想这是因为我试图更改活动中的按钮


如何解决此问题?

您是否已经尝试了按钮。设置可见(错误)?

问题

您尚未初始化变量
mBtn1
mBtn3
未正确设置,因此为空

快速解决方案

初始化变量:

public class MainActivity extends AppCompatActivity implements UpdateButtonListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        updateButton = this;
        setContentView(R.layout.this_activity_layout); // Set layout with views
        mBtn1 = findViewById(R.id.btn1); // Find Button 1
        mBtn3 = findViewById(R.id.btn3); // Find Button 3
    }
}
完整的解决方案

完成上述操作后,请阅读:关于如何通过片段与活动进行正确沟通。然后:

  • 移除
    公共静态更新按钮Listener updateButton(不应对按钮进行静态引用)
  • 更新片段按钮,按如下方式单击:

    mStopBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View myView) {
            // MainActivity.updateButton.onUpdate(false); // Don't access STATIC reference like this
    
            // Instead get the activity INSTANCE and invoke method on it
            UpdateButtonListener listener = (UpdateButtonListener) getActivity();
            if (listener != null) {
                listener.onUpdate(false);
            }
        }
    });
    
  • 希望有帮助

    我使用了button.setVisibility(车辆不可见);并且它有一个错误,不允许启动服务意图{}:应用程序在后台uid UidRecord{cee171a u0a404 TPSL idle change:idle |缓存的进程:1进程列表:18123,seq(0,0,0)}