当前位置:  编程技术>移动开发
本页文章导读:
    ▪用PendingIntent创设一个Alarm的基本过程        用PendingIntent创建一个Alarm的基本过程                                                     PendingIntent以及它的执行过程 public final class         PendingIntent       .........
    ▪ 顺利安装MAC原版-历时5天        成功安装MAC原版--历时5天写篇文章庆祝,在PC安装MAC成功,从刚开始接触MAC,到MAC成功引导到界面,总共历时5天。在这5天当中,过得是相当的累,从7月26日星期四开始折腾苹果,太辛苦了,.........
    ▪ 封存listview item的选中样式       保留listview item的选中样式最近工作中需要实现"保存listview item的选中样式"的功能,这样当用户点击某个条目去查看详细信息,返回时可以知道上次查看了哪个条目. 现在把自己的研究成果共享给.........

[1]用PendingIntent创设一个Alarm的基本过程
    来源: 互联网  发布时间: 2014-02-18
用PendingIntent创建一个Alarm的基本过程

                                                     PendingIntent以及它的执行过程



public final class
        PendingIntent
        extends Object
        implements Parcelable

        简介
        PendingIntent用于描述Intent及其最终的行为. 
        你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象,

       可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于启动一个Service的PendingIntent对象

        可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的Intent广播的PendingIntent对象

         返回的PendingIntent可以递交给别的应用程序,然后继续处理。这里的话你可以稍后才处理PendingIntent中描述的Intent及其最终行为。

        当你把PendingIntent递交给别的程序进行处理时,PendingIntent仍然拥有PendingIntent原程序所拥有的权限(with the same permissions and identity).当你从系统取得一个PendingIntent时,一定要非常小心才行。比如,通常,如果Intent目的地是你自己的component(Activity/Service/BroadcastReceiver)的话,你最好采用在Intent中显示指定目的component名字的方式,以确保Intent最终能发到目的,否则Intent最后可能不知道发到哪里了。一个PendingIntent就是Android系统中的一个token(节点,这个应该是Linux或C\C++用语)的一个对象引用,它描述了一些将用于retrieve的数据(这里,这些数据描述了Intent及其最终的行为)。

        这就意味着即使PendingIntent原进程结束了的话, PendingIntent本身仍然还存在,可在其他进程(PendingIntent被递交到的其他程序)中继续使用.如果我在从系统中提取一个PendingIntent的,而系统中有一个和你描述的PendingIntent对等的PendingInent, 那么系统会直接返回和该PendingIntent其实是同一token的PendingIntent,而不是一个新的token和PendingIntent。然而你在从提取PendingIntent时,通过FLAG_CANCEL_CURRENT参数,让这个老PendingIntent的先cancel()掉,这样得到的pendingInten和其token的就是新的了。

    

 

 

 

 

 

 

   通过FLAG_UPDATE_CURRENT参数的话,可以让新的Intent会更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。另外,我们也可以在PendingIntent的原进程中调用PendingIntent的cancel ()把其从系统中移除掉。以alarm service为例:

 

 

 

 

 

1. activity请求一个alarm一般这样来做:
# //创建一个PendingIntent  
# Intent intent = new Intent(ALARM_ALERT_ACTION);  
# intent.putExtra(ID, id);  
# intent.putExtra(TIME, atTimeInMillis);  
# PendingIntent sender = PendingIntent.getBroadcast(  
#                 context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);  
# //获得AlarmMnager并注册一个新闹铃,  
# //一次性闹铃的设置  
#   
# AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  
# am.set(AlarmManager.POWER_OFF_WAKEUP, atTimeInMillis, sender);  
2. AlarmManager.set调用AlarmManagerService.set
3. AlarmManagerService.set的核心代码如下:
  
我们可以看到它就是把PendingIntent保存起来而已
4. alarm manager service会定时查看是否有alarm到期了,如果到期了做相应处理。
5. AlarmThread会调用
alarm.operation.send(mContext, 0,
                                    mBackgroundIntent.putExtra(
                                            Intent.EXTRA_ALARM_COUNT, alarm.count),
                                    mResultReceiver, mHandler);
也就是通过PendingIntent.send执行intent操作,alarm这个就会发送ALARM_ALERT_ACTION的broadcast。                           

补充说明:
1. PendingIntent重要特点是异步处理。
2. 另外有一个要说明的是PendingIntent.onFinished,它可以作为PendingIntent.send的一个参数,
我们知道PendingIntent.send一般是在service中执行,这个调用的send后,回调onFished类的onSendFinished,所以onSendFinished一般也是在service中执行的


    
[2] 顺利安装MAC原版-历时5天
    来源: 互联网  发布时间: 2014-02-18
成功安装MAC原版--历时5天
写篇文章庆祝,在PC安装MAC成功,从刚开始接触MAC,到MAC成功引导到界面,总共历时5天。在这5天当中,过得是相当的累,从7月26日星期四开始折腾苹果,太辛苦了,终于在今晚引导成功。这期间,感谢3位MAC高人,引导我走进MAC系统,真诚感谢。

这几天会整理一篇相对比较简单的安装步骤,供兴趣爱好者继续折腾你的爱本。


2012-07-30 21:35 北京

3楼qihaowutong4小时前当初也是折腾了很久才弄上。现在想想,还是没什么必要。。搞开发的最好还是买个苹果本保险。2楼zhouguangwen123412小时前求指教。。1楼zhy_cheng昨天 21:47期待

    
[3] 封存listview item的选中样式
    来源: 互联网  发布时间: 2014-02-18
保留listview item的选中样式

最近工作中需要实现"保存listview item的选中样式"的功能,这样当用户点击某个条目去查看详细信息,返回时可以知道上次查看了哪个条目.

现在把自己的研究成果共享给大家,共同进步!

一开始以为该功能很是简单,

首先新建一个Activity:

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ArrayList<String> list = new ArrayList<String>();
		for (int i = 1; i <= 20; i++) {
			list.add("item " + i);
		}
		ListView listView = (ListView) findViewById(R.id.listview);
		listView.setAdapter(new MyAdapter(list));
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				TextView item = (TextView) view;
				item.setBackgroundResource(R.drawable.bg_article_listview_item_pressed);//把当前选中的条目加上选中效果
				if (last_item != -1 && last_item != position) {//如果已经单击过条目并且上次保存的item位置和当前位置不同
					// oldView.setBackgroundColor(Color.WHITE);
					oldView.setBackgroundResource(R.drawable.article_listview_item_bg);//把上次选中的样式去掉
				}
				oldView = item;//把当前的条目保存下来
				last_item = position;//把当前的位置保存下来
			}
		});
	}



新建相应的Adapter

	private final class MyAdapter extends BaseAdapter {
		TextView textView = null;
		private ArrayList<String> list = null;

		public MyAdapter(ArrayList<String> list) {
			this.list = list;
		}

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int position) {
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				textView = new TextView(ListViewDemoActivity.this);
			} else {
				textView = (TextView) convertView;
			}
			if (last_item == position) {//解决滑动listview的时候,选中的条目选中效果消失问题
				textView.setBackgroundResource(R.drawable.bg_article_listview_item_pressed);
			} else {
				textView.setBackgroundResource(R.drawable.article_listview_item_bg);
			}
			textView.setText(list.get(position));
			textView.setTextSize(50);
			return textView;
		}
	}

然后就是相应的布局文件和selector文件了:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_selected="true"></item>
    <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_pressed="true"></item>
   <!--  <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_focused="true"></item> -->
    <item android:drawable="@android:color/transparent"></item>
</selector>

运行结果:

当listview没有上下滑动的时候是正常,当上下滑动的时候,选中其他条目的时候,上一个条目的选中效果不会消失,那么就出现了两个条目同时出现的.如下图所示:



出现上面的情况就是找不到原因,逻辑本来就是那样的,后来就在网上找到了相关的程序,


但是他选中的时候是用颜色来作为背景的,我是用selector xml文件实现的,难道就是这个原因吗?

后来我把所有的都设置都改成了颜色值,发现真的没有问题.但是我想这没有道理 啊,后来我看看我网上找的那个程序是怎么写的,发现在main.xml文件中多了一行这样的配置:



并且背景使用selector作为, 之后运行成功.

本文中的例子程序下载地址:http://download.csdn.net/detail/johnny901114/4464975

本例子参考的网上程序下载地址:http://download.csdn.net/detail/johnny901114/4464984


欢迎转载,转载请注明出处http://blog.csdn.net/johnny901114/article/details/7802763,谢谢!   如果还有其他问题欢迎留言..




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android开发之注册登录方法示例 iis7站长之家
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3