我正在制作具有3个片段和1个活动的应用程序。
我想要
如果单击名为“ FragmentOper”的片段上的按钮,
活动中名为“ FragmentMain”的两个按钮被禁用。
我已经在互联网上进行搜索,发现自己很简单。
FragmentMain.java
public class FragmentMain extends AppCompatActivity {
public static Button BtnInit, btnOper, btnGraph;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnInit = (Button) findViewById(R.id.button1);
btnOper = (Button) findViewById(R.id.button2);
btnGraph = (Button) findViewById(R.id.button3);
setContentView(R.layout.activity_fragment); // added
FragmentMain.context = FragmentMain.this; // added
}
// added to stack Overflow codes
public void changeFragment(View view){
int id = view.getId();
Fragment fragment = null;
switch (id){
case R.id.button1:
fragment = new FragmentInit();
break;
case R.id.button2:
fragment = new FragmentOper();
break;
case R.id.button3:
fragment = new FragmentGraph();
break;
}
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.commit();
}
public void changeState(boolean state){
FragmentMain.btnGraph.setEnabled(state);
FragmentMain.btnInit.setEnabled(state);
}
}
FragmentOper.java
public class FragmentOper extends Fragment{
public Button mStartBtn;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View myView = inflater.inflate(R.layout.fragment_oper, container, false);
mStartBtn = (Button) myView.findViewById(R.id.startBtn);
mStartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View myView) {
if (isTimerRunning) // STOP
{
mStartBtn.setText("START");
isTimerRunning = false;
timerHandler.removeCallbacks(timerRunnable);
((FragmentMain)getActivity()).changeState(true);
} else {
mStartBtn.setText("PAUSE"); // Working
startTimer();
((FragmentMain)getActivity()).changeState(false);
}
}
});
return myView;
}
但是有java.lang.NullPointerException:尝试在'FragmentMain'的changeState中的空对象引用错误上调用虚拟方法'void android.widget.Button.setEnabled(boolean)'
启动该应用程序时,我按了btnINIT和btnGRAPH,它可以正常工作。
在我添加((FragmentMain)getActivity())。changeState(true);之前在onclicklistener中,效果很好。
所以我不明白为什么会有NullPointerException。
我从来没有在其他地方声明过Buttons。
如何解决?
答案 0 :(得分:0)
您缺少
setContentView(R.layout.activity_main);
活动中的{p和setContentView
必须在按钮被声明之前