将代码移动到另一个类会导致应用程序崩溃

时间:2016-06-15 11:22:14

标签: java android function class

我正在创建一个Android应用程序,一切似乎都运行正常。当我尝试将一些代码移动到另一个文件时,问题就出现了,以便解决问题。

假设该应用有一个微调器和一个按钮。按下按钮可以读取Spinner当前选定的字符串并显示Toast。所以代码是:

package com.test.example;

import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class buttonCalculation extends MainActivity {

    public void calculate(){

        Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);
        String t1= spinnerOmadas.getSelectedItem().toString();

        Toast.makeText(getApplicationContext(), t1, Toast.LENGTH_SHORT).show();

    }

}

如果我将此代码保存在主活动按钮的onClick函数中,一切正常。我想将它移动到另一个文件,因为我将添加更多代码。

所以我使用以下代码创建了一个文件 buttonCalculation.java

buttonCalculation b1 = new buttonCalculation();
b1.calculate();

并在主要活动的onClick方法中执行此操作:

{{1}}

在我的方法中,根据Android Studio没有错误,但是当我运行应用程序并按下按钮时,它会崩溃。

我是否需要声明能够找到主Activity的对象?

2 个答案:

答案 0 :(得分:2)

我认为问题在于函数findViewById(),因为您的buttonCalculation类中没有定义任何布局。因此,您必须将其作为参数传递。

public class ButtonCalculation { //I don't find any reason to extend MainActivity here

    //also you need a constructor (except if you are using a static method)
    public void ButtonCalculation (){

    }

    public void calculate(ViewGroup root, Context context){

        Spinner spinnerOmadas=(Spinner) root.findViewById(R.id.spinnerOmadas);
        String t1= spinnerOmadas.getSelectedItem().toString();

        Toast.makeText(context, t1, Toast.LENGTH_SHORT).show();

    }

}

并在您的MainActivity中

final ViewGroup root= (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);
ButtonCalculation b1 = new ButtonCalculation ();
b1.calculate(root, getApplicationContext());

答案 1 :(得分:0)

首先将微调框按钮声明为 MainActivity中的全局变量:

protected Spinner spinner;

然后在 MainActivity onCreate()方法中初始化它。

spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);

然后您可以在 buttonCalculation 类中使用它:

String t1= spinner.getSelectedItem().toString();