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