简单做了个计算器,用来熟悉Activity的跳转和Activity之间的数据传递
先上图:
简单说下原理:
首先在mainActivity中有两个EditText分别用来存入需要计算的数据,另外使用了一个RadioGroup,里面存放了4个RadioButton分别对应加减乘除四个运算方式,还有一个Button是计算用的。当输入好数据并选择好计算方式后,点击Calculator按钮后,会把两个EditText的String文本和运算符号传递并跳转到SecondActivity,然后竟有SecondActivity把数据取出来,经过字符的转换、判断等等计算出来结果,最后显示在TextView上。
以下记录使用到的新知识点:
1.字符串转换成int数据方法:
Integer.parseInt((String)xxx);//将一个字符串类型转换成一个int型数据
2.tyr catch finaly的使用
try {
result_int = firstnum_int / secondnum_int;
} catch (Exception e) {
Toast.makeText(SecondActivity.this, "除数为0非法!", Toast.LENGTH_LONG).show();
return;
}
这里没有用到finaly。
3.Activity数据的传递
传递方法:putExtra (String name, TYPE value)
接收方法:用相应类型的 get...Extra() 。
putExtra 数据类型 get…Extra 方法
int getIntExtra(String, int)
int[] getIntArrayExtra(String)
short getShortExtra(String, short)
short[] getShortArrayExtra(String)
byte getByteExtra(String, byte)
byte[] getByteArrayExtra(String)
boolean getBooleanExtra(String, boolean)
boolean[] getBooleanArrayExtra(String)
long[] getLongArrayExtra(String)
double[]) getDoubleArrayExtra(String)
char getCharExtra(String, char)
char[] getCharArrayExtra(String)
String getStringExtra(String)
String[] getStringArrayExtra (String)
long getLongExtra(String, long)
long[] getLongArrayExtra(String)
float getFloatExtra (String, float)
float[] getFloatArrayExtra(String)
double getDoubleExtra(String, double)
double[] getDoubleArrayExtra(String)
Bundle getBundleExtra(String)
在使用的过程中发现一个小问题,如下:
//使用putExtra方法最好要在传入的键值前面加上数据类型,
//亲测intent.putExtra("symbol",symbol);无法使用
intent.putExtra("symbol",(char) symbol);
最后贴上源码:
MainActivity:
package com.example.urien.calculator;
import android.content.Intent;
import android.support.annotation.VisibleForTesting;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private byte symbol = '+';
//第一步、声明控件
private EditText editText_fistnum;
private EditText editText_secondnum;
private RadioGroup radioGroup;
// private RadioButton radioButton_add;
// private RadioButton radioButton_sub;
// private RadioButton radioButton_mul;
// private RadioButton radioButton_div;
private Button button_calculator;
private TextView textView_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第二步、找到相应的控件
editText_fistnum = findViewById(R.id.edit_firstnum);
editText_secondnum = findViewById(R.id.edit_secondnum);
radioGroup = findViewById(R.id.radioGroup);
// radioButton_add = findViewById(R.id.radio_add);
// radioButton_add = findViewById(R.id.radio_sub);
// radioButton_add = findViewById(R.id.radio_mul);
// radioButton_add = findViewById(R.id.radio_div);
button_calculator = findViewById(R.id.button_calculator);
textView_result = findViewById(R.id.text_result);
//第四步、绑定相应的监听器
button_calculator.setOnClickListener(new buttonListener());
radioGroup.setOnCheckedChangeListener(new radioGroupListener());
}
//第三步、复写监听器函数
class buttonListener implements Button.OnClickListener {
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this, "test", Toast.LENGTH_LONG).show();
/**
* 生成一个意图对象
*/
Intent intent = new Intent();
/**
* 传入键值对
*/
intent.putExtra("firstNum",(String) editText_fistnum.getText().toString());
//使用putExtra方法最好要在传入的键值前面加上数据类型,
//亲测intent.putExtra("symbol",symbol);无法使用
intent.putExtra("symbol",(char) symbol);
intent.putExtra("secondNum", (String) editText_secondnum.getText().toString());
/**
* 设置跳转的两个Activity
*/
intent.setClass(MainActivity.this, SecondActivity.class);
/**
* 启动意图对象
*/
startActivity(intent);
}
}
class radioGroupListener implements RadioGroup.OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.radio_add:symbol = '+';break;
case R.id.radio_sub:symbol = '-';break;
case R.id.radio_mul:symbol = 'x';break;
case R.id.radio_div:symbol = '/';break;
}
}
}
}
SecondActivity:
package com.example.urien.calculator;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class SecondActivity extends AppCompatActivity {
private TextView textView_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textView_result = findViewById(R.id.text_result);
//得到传递过来的意图对象
Intent intent = getIntent();
//得到传递过来对应键的键值
String firstnum_str = intent.getStringExtra("firstNum");
String secondNum_str = intent.getStringExtra("secondNum");
char symbol = intent.getCharExtra("symbol", '0');
//调试打印使用
System.out.println("firstNum = " + firstnum_str + ",secondNum = " + secondNum_str + ",symbol = " + symbol);
//把字符串类型的转换成int型数据
int firstnum_int = Integer.parseInt(firstnum_str);
int secondnum_int = Integer.parseInt(secondNum_str);
int result_int = 0;
switch (symbol) {
case '+':
result_int = firstnum_int + secondnum_int;
break;
case '-':
result_int = firstnum_int - secondnum_int;
break;
case 'x':
result_int = firstnum_int * secondnum_int;
break;
case '/': {
try {
result_int = firstnum_int / secondnum_int;
} catch (Exception e) {
Toast.makeText(SecondActivity.this, "除数为0非法!", Toast.LENGTH_LONG).show();
return;
}
}
}
//result_int 为整形数据,java中打印或者显示都是字符串类型的数据,
// 使用 (int) + ""的方法可以无条件的将int数据转换成string类型
textView_result.setText(result_int + "");
}
}
By Urien 2018年6月12日 11:21:08