我对Android很新,我正在通过阅读Deitel书来学习它。我决定开发一个带标签的应用程序,我正在使用Fragments(你可以看到)。
我在我的书/互联网上阅读如何为按钮实现onClick
事件,但当我尝试在Android手机中运行该应用时,它会崩溃。
代码
public class GamesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_games, container, false);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText val1 = (EditText) v.findViewById(R.id.editText1);
EditText val2 = (EditText) v.findViewById(R.id.editText2);
EditText val3 = (EditText) v.findViewById(R.id.editText3);
EditText sol1 = (EditText) v.findViewById(R.id.editText4);
EditText sol2 = (EditText) v.findViewById(R.id.editText5);
//Solve the equation using a method of a class I created
equazioni2grado Equazione = new equazioni2grado();
Equazione.solveEquation(val1.getText().toString(), val2.getText().toString(), val3.getText().toString());
//Show the results
sol1.setText( Equazione.getSol1AsFraction() );
sol2.setText( Equazione.getSol1AsFraction() );
}
});
return view;
}
}
XML link
我把XML放在一个pastebin中,因为它很长。 XML看起来像这样:
我读到我可以在XML或java文件中定义onClick
事件,两种方式都是可能的。我正在以编程方式进行操作。
我无法找到我的错误。有什么想法吗?
注意:对象Equazione的方法是:
public void solveEquation(String x, String y, String z) { ... }
答案 0 :(得分:1)
EditText val1 = (EditText) v.findViewById(R.id.editText1);
使用view而不是v
EditText val1 = (EditText) view.findViewById(R.id.editText1);
答案 1 :(得分:1)
尝试下面的代码:
public class GamesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_games, container, false);
Button button = (Button) view.findViewById(R.id.button1);
EditText val1 = (EditText) view.findViewById(R.id.editText1);
EditText val2 = (EditText) view.findViewById(R.id.editText2);
EditText val3 = (EditText) view.findViewById(R.id.editText3);
EditText sol1 = (EditText) view.findViewById(R.id.editText4);
EditText sol2 = (EditText) view.findViewById(R.id.editText5);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Solve the equation using a method of a class I created
equazioni2grado Equazione = new equazioni2grado();
Equazione.solveEquation(val1.getText().toString(), val2.getText().toString(), val3.getText().toString());
//Show the results
sol1.setText( Equazione.getSol1AsFraction() );
sol2.setText( Equazione.getSol1AsFraction() );
}
});
return view;
}
}
你可以粘贴LogCat吗?
答案 2 :(得分:0)
您需要在代表您已膨胀的布局的视图上调用findViewById。在这种情况下,它是从inflater.inflate()返回的对象“view”。
这样做的一种方法是将视图声明为最终变量,然后将“v.findViewById ...”替换为“view.findViewById ...”。