Android 按钮单击不将结果返回到文本视图
我对编码还不熟悉,对我的知识有点模糊,所以如果我忽略了一些简单的东西,请原谅我,但我已经花了2个小时寻找答案 我的一个类将允许用户输入他们的身高和体重,并返回他们的BMI(体重指数)。问题是,一旦他们单击执行计算的按钮并将其显示在文本视图中,什么都不会发生。我从LogCat中看到的唯一错误是非活动InputConnection上的Android 按钮单击不将结果返回到文本视图,android,android-button,Android,Android Button,我对编码还不熟悉,对我的知识有点模糊,所以如果我忽略了一些简单的东西,请原谅我,但我已经花了2个小时寻找答案 我的一个类将允许用户输入他们的身高和体重,并返回他们的BMI(体重指数)。问题是,一旦他们单击执行计算的按钮并将其显示在文本视图中,什么都不会发生。我从LogCat中看到的唯一错误是非活动InputConnection上的getCursorCapsMode。此错误仅在我使用软键盘上的next按钮在EditText字段之间移动时显示,因此我认为这与此无关,因为当我在字段之间手动移动时仍然没
getCursorCapsMode
。此错误仅在我使用软键盘上的next
按钮在EditText字段之间移动时显示,因此我认为这与此无关,因为当我在字段之间手动移动时仍然没有结果,并且没有出现此错误。如果您有任何信息,也可以随时帮助解决这个问题
这是BMI android开发教程中的重复代码,除了项目的id之外,逐字逐句,但是当加载到模拟器中时,该教程可以完美地工作。我的代码如下:
public class FuncConverter extends DashMenuActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView (R.layout.dash_converter7);
Spinner converter_spinner = (Spinner) findViewById(R.id.converter_spinner);
ArrayAdapter<CharSequence> converter_adapter = ArrayAdapter.createFromResource(
this, R.array.converter_array, android.R.layout.simple_spinner_item);
converter_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
converter_spinner.setAdapter(converter_adapter);
}
public void calcClick (View view) {
if (view.getId() == R.id.convert_btn_calc) {
EditText weight_edit = (EditText) findViewById(R.id.weight_edit);
EditText height_edit = (EditText) findViewById(R.id.height_edit);
TextView bmi_text = (TextView) findViewById(R.id.bmi_text);
float weight = Float.parseFloat(weight_edit.getText().toString());
float height = Float.parseFloat(height_edit.getText().toString());
float bmiValue = calculateBMI (weight, height);
String bmiCalc = interpretBMI (bmiValue);
bmi_text.setText(bmiValue + " - " + bmiCalc);
}
}
private float calculateBMI (float weight, float height) {
return (float) (weight / (height * height));
}
private String interpretBMI(float bmiValue) {
if (bmiValue < 16) {
return "Severley Underweight";
} else if (bmiValue < 18.5) {
return "Underweight";
} else if (bmiValue < 25) {
return "Healthy weight";
} else if (bmiValue < 30) {
return "Overweight";
} else {
return "Obese";
}
}}
公共类FuncConverter扩展DashMenuActivity{
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.dash_转换器7);
微调器转换器\u微调器=(微调器)findViewById(R.id.converter\u微调器);
ArrayAdapter转换器\u适配器=ArrayAdapter.createFromResource(
这个,R.array.converter\u array,android.R.layout.simple\u微调器\u项);
converter_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉列表_项);
转换器\旋转器。设置适配器(转换器\适配器);
}
公共作废calcClick(视图){
if(view.getId()==R.id.convert\u btn\u calc){
EditText-weight\u-edit=(EditText)findViewById(R.id.weight\u-edit);
EditText高度_编辑=(EditText)findViewById(R.id.height_编辑);
TextView bmi_text=(TextView)findViewById(R.id.bmi_text);
float weight=float.parseFloat(weight_edit.getText().toString());
float height=float.parseFloat(height_edit.getText().toString());
浮动BMI值=计算BMI(体重、身高);
字符串bmiCalc=解释bmi(bmi值);
bmi_text.setText(bmi值+“-”+bmiCalc);
}
}
专用浮子计算器BMI(浮子重量、浮子高度){
返回(浮动)(重量/(高度*高度));
}
专用字符串解释BMI(浮点BMI值){
如果(BMI值<16){
返回“Severley体重不足”;
}否则如果(BMI值<18.5){
返回“减持”;
}否则如果(BMI值<25){
返回“健康体重”;
}否则如果(BMI值<30){
返回“超重”;
}否则{
返回“肥胖”;
}
}}
我很难做出明确的回答,因为我不确定你是如何触发点击来计算这些数据的。但据我所知,calcClick(View)
在xml中定义为onClick=calcClick
。如果这是真的,那么你得到的信息是错误的
public class FuncConverter extends DashMenuActivity {
EditText weight_edit;
EditText height_edit;
TextView bmi_text;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView (R.layout.dash_converter7);
Spinner converter_spinner = (Spinner) findViewById(R.id.converter_spinner);
ArrayAdapter<CharSequence> converter_adapter = ArrayAdapter.createFromResource(
this, R.array.converter_array, android.R.layout.simple_spinner_item);
converter_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
converter_spinner.setAdapter(converter_adapter);
//Moved these bad boys here for you instead
weight_edit = (EditText) findViewById(R.id.weight_edit);
height_edit = (EditText) findViewById(R.id.height_edit);
bmi_text = (TextView) findViewById(R.id.bmi_text);
}
public void calcClick (View view) {
if (view.getId() == R.id.convert_btn_calc) { //dont't think you need this check to be honest
float weight = Float.parseFloat(weight_edit.getText().toString());
float height = Float.parseFloat(height_edit.getText().toString());
float bmiValue = calculateBMI (weight, height);
String bmiCalc = interpretBMI (bmiValue);
bmi_text.setText(bmiValue + " - " + bmiCalc);
}
}
公共类FuncConverter扩展DashMenuActivity{
编辑文本权重;
编辑文本高度\编辑;
text查看bmi_文本;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.dash_转换器7);
微调器转换器\u微调器=(微调器)findViewById(R.id.converter\u微调器);
ArrayAdapter转换器\u适配器=ArrayAdapter.createFromResource(
这个,R.array.converter\u array,android.R.layout.simple\u微调器\u项);
converter_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉列表_项);
转换器\旋转器。设置适配器(转换器\适配器);
//替你把这些坏小子搬到这里来了
权重编辑=(EditText)findViewById(R.id.weight\u edit);
高度编辑=(编辑文本)findViewById(R.id.height\u edit);
bmi_text=(TextView)findViewById(R.id.bmi_text);
}
公共作废calcClick(视图){
如果(view.getId()==R.id.convert\u btn\u calc){//老实说,你不需要这个检查
float weight=float.parseFloat(weight_edit.getText().toString());
float height=float.parseFloat(height_edit.getText().toString());
浮动BMI值=计算BMI(体重、身高);
字符串bmiCalc=解释bmi(bmi值);
bmi_text.setText(bmi值+“-”+bmiCalc);
}
}
我所做的只是将EditText
和TextView
作为全局文件移动,这样您就可以在calcClick(View)
中访问它。如果我是对的,它不起作用的原因是因为您无法从onCreate()之外的xml访问EditText
和TextView
视图
,至少在您的情况下是这样。View
参数传递的实际上是按钮或触发事件的任何东西。希望这是有意义的。因此View View
不是文档根,而是(按钮)查看
或再次查看,无论您单击什么都可以触发此操作。是什么触发了将BMI作为文本视图返回的操作?就像xml中定义为onClick
的calcClick>一样?我现在正在使用Andy的方法进行此操作,但结果是我忽略了xml中的一个错误,将onClick=“calcClick”
而不是android:onClick=“calcClick”
。很高兴我能帮上忙。请记住,几乎所有东西(如果不是所有东西)都是从标签属性的xml中的android:
开始的。您的方法仍然返回相同的结果,但这当然是我忽略的。我的xml有onClick=“calcClick”
而不是android:onClick=“calcClick”