Activity_01常见控件的使用方法以及不同Activity之间的通信
笔记摘要:
通过一个简单的乘法计算器来熟悉各种控件的使用方法,以及实现如何在同一个程序中的不同的Activity之间的交流,比如如何从一个MainActivity跳转
到另外一个OtherActivity,以及如何将数据从OtherActivity返回到MainActivity,同时也对如何为Menu按钮添加条目进行了简单的介绍
思路:
1、在MainActivity中实现乘法计算的界面,
2、为了提高灵活性和国际化,在string.xml中定义将要使用的字符串值,
3、在src下新建一个ResultActivity.java来显示计算的结果
4、在Androidmainfest.xml文件中对ResultActivity进行注册
5、在res目录下新建一个result.xml来对ResultActivity的界面进行布局
6、在MainActivity中通过监听器监听按钮和Intent请求来实现来实现到另一个Activity的跳转和数据传递
7、在resultActivity中获取传进来的数据,并进行转换和计算,为resultActivity中的TextView设置计算结果
8、为了能够退出应用程序,复写onCreateOptionsMenu和onOptionsItemSelected方法,
分别实现item的添加和程序退出
出现的错误
错误一:
Caused by:android.content.res.Resources$NotFoundException: Resource ID #0x7f070006 type#0x12 is not valid
错误原因:
setContentView(R.layout.result);//正确
setContentView(R.id.result);//错误,因为是在layout文件夹中定义的视图,所以为R.layout.result
//resultView= (TextView)findViewById(R.id.result);
错误二:
Causedby: android.content.res.Resources$NotFoundException: String resource ID #0x31
错误原因
resultView.setText(result);//错误,在设置View中参数是字符串
resultView.setText(result+"");
实现效果图:
简单乘法计算器代码实现
1、在string.xml文件中对一些名称进行配置,以便实现国际化
<resources> <string name="app_name">MyCalculator</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">乘法计算器</string> <string name="symbol">乘以</string> <string name="calculate">计算</string> <string name="resultLabel">result</string> <string name="closeButton">关闭</string> <string name="exit">退出</string> <string name="about">关于</string> </resources>
2、在main.xml文件中对MainActivity进行布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:context=".MainActivity" /> <!-- 参数一编辑框 --> <EditText android:id="@+id/firstFactor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp"/> <!-- 显示“乘法”符号 --> <TextView android:id="@+id/symbol" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="80dp"/> <!-- 参数二编辑框 --> <EditText android:id="@+id/secondFactor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="100dp" /> <!-- 计算按钮 --> <Button android:id="@+id/calculate" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="160dp"/> </RelativeLayout>
3、实现一些控件的功能:MainActivity的
bundle.puString("name", "zhangsan");
package com.example.mycalculator; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; /* 1、在MainActivity中,要声明4个控件 * 2、获取要使用的控件对象 * 3、为计算按钮 和 乘法符号控件设置显示的值 * 3、创建一个监听器类,监听按钮按下的动作 * 4、将监听器类的对象,绑定在按钮对象上 * 5、为了能够退出应用程序,复写onCreateOptionsMenu和onOptionsItemSelected方法, * 分别实现item的添加和程序退出 * */ public class MainActivity extends Activity { private EditText firstFactor ; private EditText secondFactor ; private Button calculate ; private TextView symbol; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //根据控件的ID来获取代表控件的对象 calculate = (Button) findViewById(R.id.calculate); symbol = (TextView)findViewById(R.id.symbol); //为symbol和calculate设置显示的值 calculate.setText(R.string.calculate); symbol.setText(R.string.symbol); firstFactor = (EditText) findViewById(R.id.firstFactor); secondFactor = (EditText) findViewById(R.id.secondFactor); //将监听器的对象绑定到按钮对象上面 calculate.setOnClickListener(new CalculateListener()); } private final class CalculateListener implements OnClickListener{ public void onClick(View v) { //获取两个EditText控件的值 String firstFactorStr = firstFactor.getText().toString(); String secondFactorStr = secondFactor.getText().toString(); //将这两个值存放到intent对象中 Intent intent = new Intent(); intent.putExtra("first", firstFactorStr); intent.putExtra("second",secondFactorStr); intent.setClass(MainActivity.this, ResultActivity.class); /*Bundle bundle = new Bundle(); bundle.putInt("first",3); bundle.putInt("second", 2); intent.putExtras(bundle);*/ //intent.setClass(MainActivity.this, ResultActivity.class); intent.setClassName("com.example.mycalculator","com.example.mycalculator.ResultActivity"); //使用这个intent对象来启动ResultActivity //MainActivity.this.startActivity(intent); startActivityForResult(intent, 200);//启动ResultActivity并可以获取返回结果 } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String result = data.getStringExtra("return"); Toast.makeText(this, result, 1).show(); super.onActivityResult(requestCode, resultCode, data); } //当客户点击MENU按钮的时候,调用该方法 @Override public boolean onCreateOptionsMenu(Menu menu) { // getMenuInflater().inflate(R.menu.activity_main, menu); //添加按钮,add(int groupId, int itemId, int order, int titleRes) menu.add(0,1,1,R.string.exit); menu.add(0,2,2,R.string.about); return true; //return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==1){ finish(); } return super.onOptionsItemSelected(item); } }
4、对需要跳转到的Activity在Androidmainfest.xml文件中进行注册
<activity android:name=".ResultActivity" android:label="@string/resultLabel"/>
5、在result.xml文件中定义一个需要显示结果的TextView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 显示计算结果 --> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/closeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/closeButton" android:onClick="closeActivity" /> </LinearLayout>
6、在ResultActivity中实现数据的获取和计算
package com.example.mycalculator; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class ResultActivity extends Activity { private TextView resultView; private Bundle bundle; private int result=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.result);// //setContentView(R.id.result);//这里是在layout文件夹中定义的视图,所以应该是R.layout.result //获取结果显示对象 resultView = (TextView)findViewById(R.id.result); //创建意图对象并获取传入的值 Intent intent = getIntent(); String firstFactorStr = intent.getStringExtra("first"); String secondFactorStr = intent.getStringExtra("second"); //为了计算,需要进行类型转换 int firstInt = Integer.parseInt(firstFactorStr); int secondInt = Integer.parseInt(secondFactorStr); result = firstInt*secondInt; resultView.setText(result+"");//参数应该为string类型 //resultView.setText(result);错误 } //关闭该Activity public void closeActivity(View v){ Intent data = new Intent(); data.putExtra("return","ResultActivity closed"); //存入数据 setResult(100,data); //设置返回码和数据 this.finish();//关闭该Activity } }