我正在创建一个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的对象?
答案 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();