最近代码写得自己都佩服自己了,从安卓还仅仅是入门到慢慢一点一点地拓展,一整天坐在电脑前,一个一个字母的编写程序。连续几天都亢奋地写代码,用宿舍的人的话来说,就是沉默于代码,日渐消瘦。但是付出的时间越多,所见到的收获还是越多的,而且是可见的收获。趁着app的功能模型轮廓大体上已经出来,就拿点时间来写一下博客记录一下学到的东西,虽然还有很多关于安卓的内容需要更多的时间来写。
在安卓中,需要切换各个activity页面,所以就必须要用到intent意图来完成这一个目的。按照以前的知识,只是用到了intent跳换到另一个页面,当从一个页面带着参数跳到另一个页面,或者当从一个选择页面挑回到原来的页面同时改变选择的内容,或者最上面的标题栏上的返回效果的实现等等,都需要用到一定的技巧。
同时,以前也做过一个通讯录app,但是当时做得比较急,没有考虑到很多细节上的问题,所以在使用intent的时候没有考虑到栈的顺序,所以按返回按键的时候没有出现想象中的效果。
- 一般的Intent
- 带参数的Intent
- 从选择功能页面返回
- back功能的实现
一般的Intent
一般的intent实现起来十分简单,通常分为显式intent和隐式intent。在这里就不详细涉及到这一部分,只是简单地给出显式intent的例子。
Intent intent = new Intent(MainActivity.this, NewActivity.class);
startActivity(intent);
值得注意的是,当intent是在Fragment中的时候,一般是通过getActivity()来获取当前Activity的值。如下:
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
带参数的Intent
其实大致上的使用方法都差不多,都是设置从一个Activity跳转到另一个Activity,只不多带参数的intent就在跳转的时候设置一下参数。
String tip = "";
Intent intent = new Intent(MainActivity.this, NewActivity.class);
intent.putExtra("tip",tip);
startActivity(intent);
然后在NewActivity中,通过以下的方法来实现取得参数的值。
Intent intent = getIntent();
String value = intent.getStringExtra("tip");
从选择功能页面返回
在编写代码的时候,遇到了一个问题,当从一个页面进入了一个选择功能的页面的时候,选择了一个东西,然后返回到原来的页面。这样就会出现一个问题,因为一开始进入页面的时候并没有经过选择功能页面的,这样在页面中使用getIntent()是取不到值的,程序会报空指针错误。
所以就要通过setResult()来实现这些功能,大体上通过以上的代码:
在原本的Activity中:
加入startActivityForResult()跳转到SelectActivity
startActivityForResult (new Intent(MainActivity.this, SelectActivity.class), 1);
然后可以用以下的方法接收到SelectActivity传回来的消息
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Error", data.getStringExtra("selected"));
Toast.makeText(getActivity(),data.getStringExtra("selected"), 1).show();
}
在选择功能的页面上,通过setResult()来设置值
Intent intent = getIntent();
intent.putExtra("selected", tip);
SelectActivity.this.setResult(1, intent);
SelectActivity.this.finish();
注意以上的requestCode和resultCode用法和所代表的内容。
back功能的实现
在一般的app页头,都存在一个返回的按键,点击返回就会直接退出当前页面回到上一个Activity,实现的代码如下:
@Override
public void onClick(View view) {
getActivity().finish();
}
其实这里就是直接finish当前的Activity。
后记
这个博客写得有点久,写了几个小时,一边写一边给人讲解代码,然后呢还要跟另外的一个人聊聊人生,然后写写停停的,总算花了几个小时写完了一篇并不长的博客,接下来,等做完了app之后再总结一下安卓自定义控件的使用吧。