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+"");


实现效果图:


MainActivity



点击Menu按钮的效果,点击退出时,MainActivity退出


ResultActivity



关闭ResultActivity后返回数据


简单乘法计算器代码实现


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的
这里对Menu按钮的Item进行了注册以及关闭功能的绑定,需要覆盖两个方法:
   onCreateOptionsMenu(Menu menu)//进行初始化动作,添加条目
   onOptionsItemSelected(MenuItem item)//实现条目的功能

激活其它Activity的几种方式:
    Intent intent = new Intent();
     1>intent.setClassName("com.example.mycalculator","com.example.mycalculator.ResultActivity")    //跨应用
     2>intent.setClassName(this,"com.example.mycalcutor.ResultActivity");
     3>intent.setClass(this,ResultActivity.class);
     4>intent.setComponent(new ComponentName(this,ResultActivity,class));
     5>Intent intent = new Intent(this,ResultActivity.class);

对于不同Activity之间传递数据,可以使用Bundle对象,它可以更好的处理基本类型的数据:
      Bundle bundle = new Bundle();
      bundle.putInt("age",20);
      bundle.puString("name", "zhangsan");
      intent.putExtras(bundle);

由于我们要对ResultActivity的返回结果进行接收,所以在启动ResultActivity的时候应该使用startActivityForResult(intent,requestCode);方法
并复写OnActivityResult方法,对返回的数据进行处理

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中实现数据的获取和计算
这里添加一个按钮,用于关闭该ResultActivity,同时添加一个closeActivity方法,用于返回数据

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
	}
	
}




转载于:https://www.cnblogs.com/xushuai123/archive/2012/11/02/2978057.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值