片段布局中的按钮事件

时间:2015-06-16 01:01:59

标签: android xml android-layout android-fragments

我对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看起来像这样:

enter image description here

我读到我可以在XML或java文件中定义onClick事件,两种方式都是可能的。我正在以编程方式进行操作。

我无法找到我的错误。有什么想法吗?

注意:对象Equazione的方法是:   public void solveEquation(String x, String y, String z) { ... }

3 个答案:

答案 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 ...”。