【记录】Intent和Activity的学习

每次调试会发现新的问题(关于项目的。。)


gen目录下的R.java在运行后会自动消失。。


原因分析:(1)、res目录下的layout下的xml文件名有错。按照Android的命名规范是:[a-z0-9_.]  这里要看清楚了,是不能大写开头的!导致xml无法被正确解析。
(2)、layout下的xml文件里面的存在非法字符,一般在eclipse下会进行提示,如果发现有打X的情形,就需要进行修改。特别要注意是半角符号和全角符号,这个错误很隐蔽,大家要小心。还有要符合xml的书写规范。

(3)、layout下的xml文件里,控件的ID值命名有重复。这个错误很隐蔽,大家要仔细检查。因为eclipse本身并不会报错。

(4)、manifest文件中有错误没有修改

解决办法:

如果上述的原因都找了,这个时候gen目录下的R依然出错,对Android工程进行refresh一下,看R文件是否已经更新。
还可以将project ->Build Automatically尽心勾选,让eclipse帮你进行自动更新。如果再不行的话,就尝试进行clean一下,看是否会正常得自动生成。
如果上述的原因都找了,但是源代码依然有错,这个使用你看一下,import Android.R 这个包是否被引入了,如果被包含了,请将这个包去掉,否则错误无法解除。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面进入正题:

1、显示MainActivity(Main.xml)

代码:

public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		listener1 = new OnClickListener() {
		//见下文
		};
		listener2 = new OnClickListener() {
		//<span style="font-family: Arial, Helvetica, sans-serif;">见下文</span>
		};
		setContentView(R.layout.main);
		button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(listener1);
		button2 = (Button) findViewById(R.id.button2);
		button2.setOnClickListener(listener2);
		setTitle("ActivityMain");
	}
主界面:


2、点击Button2,程序跳转到Activity2

listener2 = new OnClickListener() {
			public void onClick(View v) {
				setTitle("这是在ActivityMain");
				Intent intent2 = new Intent(ActivityMain.this, Activity2.class);
				startActivity(intent2);

			}
		};
intent用来启动一个新的Activity(activity2)
结果如图:

看Activity2.java的代码:
public class Activity2 extends Activity {
	OnClickListener listener = null;
	Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);
        listener = new OnClickListener() {
			public void onClick(View v) {
				finish();
			}
		};
		button = (Button) findViewById(R.id.button4);
		button.setOnClickListener(listener);
		setTitle("现在是在Activity2里");
    }
}
点击button4,结束当前Activity,回到Main:

3、点击Button1:

跳转代码:
listener1 = new OnClickListener() {
			public void onClick(View v) {
				Intent intent1 = new Intent(ActivityMain.this, Activity1.class);
				intent1.putExtra(<span style="font-family: Arial, Helvetica, sans-serif;">"activityMain"</span>, "数据来自activityMain");
				startActivityForResult(intent1, REQUEST_CODE);
			}
		};
startActivityForResult()这个方法启动intent时与startActivity()不同,当新的Activity运行结束时,还要执行原Activity中的回调函数 onActivityResult(),而startActivity()不用。

Activity可以传递数据,本代码传递了名值对。intent1.putExtra(),将"数据来自activityMain"保存在"activityMain"名词中
putExtra()蒋值添加到intent1的mExtras变量里面,它是一个Bundle类型(对HashMap的封装--》类型安全的容器)
REQUEST_CODE会回传到回调函数 onActivityResult()中:REQUEST_CODE不同执行的操作也不同
参数传递代码:
(1)将Main中的数据显示在标题中
 Bundle extras = getIntent().getExtras();
	        if (extras != null) {
	             data = extras.getString("activityMain");
	        }
		setTitle("现在是在Activity1里:"+data);
结果如下:

4、点击Button3

将需要返回的数据放到intent中:

 listener3 = new OnClickListener() {
			public void onClick(View v) {
				Intent mIntent = new Intent();
				mIntent.putExtra("store", "数据来自Activity1");
				setResult(RESULT_OK, mIntent);
				finish();
			}
		};

设置结果状态码,会回传到回调函数 onActivityResult()中

5、回调函数onActivityResult(int requestCode, int resultCode, Intent data)


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == REQUEST_CODE) {
			if (resultCode == RESULT_CANCELED)
				setTitle("取消");
			else if (resultCode == RESULT_OK) {
				String temp=null;
				 Bundle extras = data.getExtras();
			        if (extras != null) {
			        	temp = extras.getString("store");//数据来自Activity1显示在标题
			        }
				setTitle(temp);
			}
		}
	}

结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值