Android 片段布局中的按钮事件

Android 片段布局中的按钮事件,android,xml,android-layout,android-fragments,Android,Xml,Android Layout,Android Fragments,我对安卓相当陌生,我通过阅读Deitel的书来学习它。我决定开发一个带有标签的应用程序,我正在使用片段(如你所见) 我在书中/在互联网上读到了如何为按钮实现onClick事件,但当我试图在Android手机上运行该应用程序时,它崩溃了 代码 public class GamesFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup cont

我对安卓相当陌生,我通过阅读Deitel的书来学习它。我决定开发一个带有标签的应用程序,我正在使用片段(如你所见)

我在书中/在互联网上读到了如何为按钮实现
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

我将XML放在一个粘贴箱中,因为它相当长。XML如下所示:

我听说我可以在XML或java文件中定义
onClick
事件,这两种方法都可以。正如你所看到的,我是以编程的方式做这件事的

我找不到我的错误在哪里。有什么想法吗

注意:对象Equazione具有以下方法:
public void解算方程(字符串x、字符串y、字符串z){…}

EditText val1 = (EditText) v.findViewById(R.id.editText1);
使用视图而不是v,如下所示

EditText val1 = (EditText) view.findViewById(R.id.editText1);
请尝试以下代码:

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吗?

您需要在表示已充气布局的视图上调用findViewById。在本例中,它是从inflater.inflate()返回的对象“view”

一种方法是将view声明为最终变量,然后将调用“v.findviewbyd…”替换为“view.findviewbyd…”