嗨
我正在制作一个具有1个主要活动和3个片段的应用程序。
在活动中,有一个片段显示另一个片段
通过在主要活动中单击按钮来更改它。
有一个带有按钮的片段。
我希望当按下片段中的按钮时,活动中的按钮将被禁用。
How to Enable/ Disable button from another fragment in android?
有类似的问答,所以我已经尝试过了。
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_3demo.FragmentOper $ 2.onClick(Fragment1.java:124)
我想这是因为我试图更改活动中的按钮。
我该如何解决这个问题?
答案 0 :(得分:0)
您是否已经尝试过yourbutton.setvisible(false)?
答案 1 :(得分:0)
问题
您尚未初始化变量。 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
}
}
完整解决方案
完成上述操作后,请阅读:https://developer.android.com/training/basics/fragments/communicating,了解如何通过片段正确地与活动进行交流。然后:
public static UpdateButtonListener 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);
}
}
});
希望有帮助!