当前位置:  编程技术>移动开发
本页文章导读:
    ▪[有关问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖        [问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖? 情况是这样的,使用NotificationManager触发多个Notification: private Notification genreNotification(Context context, int icon, String tickerText, String title.........
    ▪ 用 UITableView 开展多选的代码例子        用 UITableView 进行多选的代码例子 用 UITableView 进行多选的代码例子               原文:http://www.devdiv.com/iOS_iPhone-%E7%94%A8_UITableView_%E8%BF%9B%E8%A1%8C%E5%A4%9A%E9%80%89%E7%9A%84%E4%BB%A3%E7%A0%81%E4%BE%8B%E5.........
    ▪ 内容替引用别人的文章,备自己学习之用       内容为引用别人的文章,备自己学习之用. ==============在application 节点配置首先启动的Activity 节点<activity android:name=".HelloActivity" android:label="@string/app_name">            <intent-filter>.........

[1][有关问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖
    来源: 互联网  发布时间: 2014-02-18
[问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?

情况是这样的,使用NotificationManager触发多个Notification:

private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent){
        Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
        PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(context, title, content, pendIntent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        return notification;
    }

...
mNotificationManager.notify(ID_1, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText1, notifyTitle1, notifyText1, intent_1));
...
mNotificationManager.notify(ID_2, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText2, notifyTitle2, notifyText2, intent_2));

...
mNotificationManager.notify(ID_3, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText3, notifyTitle3, notifyText3, intent_3));

 可见ID和Intent都是不同的,生成的PendingIntent分别对应着不同的Intent。但是,你会发觉无论点哪个Notification,传递回来的都是最后被notify的Intent。这里即intent_3。

 

找了很久,试了改变PendingIntent的flag也无果,最后还是在这帖子里找到答案(CSDN帖子 ),我来总结下:

问题主要出在PendingIntent.getActivity();的第二个参数,API文档里虽然说是未被使用的参数(给出的例子也直接写0的),实际上是通过该参数来区别不同的Intent的,如果id相同,就会覆盖掉之前的Intent了。所以总是获取到最后一个Intent。

 

只要每个不同的Intent对应传递一个独立的ID就可以了,以上函数修改如下(增加ID参数):

private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent, int id){
        Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
        // 问题就在这里的id了
        PendingIntent pendIntent = PendingIntent.getActivity(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(context, title, content, pendIntent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        return notification;
    }

...
mNotificationManager.notify(ID_1, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText1, notifyTitle1, notifyText1, intent_1, ID_1));
...
mNotificationManager.notify(ID_2, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText2, notifyTitle2, notifyText2, intent_2, ID_2));

...
mNotificationManager.notify(ID_3, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText3, notifyTitle3, notifyText3, intent_3, ID_3));
1 楼 andh1222 2012-03-08  
太强悍了,老大,我也是这个问题,搞了好久,差文档也么搞定啊。

多谢你这篇文章了。   

再问一个问题。

发送Notification的时候,怎么隐藏状态栏上的图标啊。

如果发送多个Nofication,显示多个图标,画面非常不友好。

2 楼 univasity 2012-03-12  
andh1222 写道
太强悍了,老大,我也是这个问题,搞了好久,差文档也么搞定啊。

多谢你这篇文章了。   

再问一个问题。

发送Notification的时候,怎么隐藏状态栏上的图标啊。

如果发送多个Nofication,显示多个图标,画面非常不友好。



就是通过显示图标来提示用户的吧,没有图标怎么提示呢。应该不能隐藏。

说的多个图标,如果你是同一个提示内容是可以使用PendingIntent.FLAG_UPDATE_CURRENT等属性来控制的。但如果是要提示并绑定不同的Intent,目前确实是一条Notification对应一个独立的ICON的,暂不知有没其他解决方法,mark下研究下。
3 楼 andh1222 2012-03-14  
 

我们项目中有这么一个要求。

标题栏上只显示一个计数的ICON
通知领域内要显示每次发送的Notification,并且Notification对应的PendingIntent内容也不相同。

据说客户是看了Gmail的效果提出来的。

真是头疼啊,只能看看有没有方法解析Gmail的源代码了。
4 楼 univasity 2012-03-21  
andh1222 写道

发送Notification的时候,怎么隐藏状态栏上的图标啊。


对于隐藏Notification的ICON,最近看到了这样一篇文章,也许有帮助...回头来试试,发觉Notification还有好多参数没有仔细研究过.
http://stackoverflow.com/questions/2855110/android-no-icon-for-notification
5 楼 andh1222 2012-03-21  
,多谢。
这个帖子看过,应该是用透明图标一类实现的效果。
实现了一下,不是特别理想。

也测试了一下主流软件的Notification效果,例如:firefox,dorpBox,evernote等
没有像Gmail那么实现的,估计是Google自己做的特效吧。

    
[2] 用 UITableView 开展多选的代码例子
    来源: 互联网  发布时间: 2014-02-18
用 UITableView 进行多选的代码例子

用 UITableView 进行多选的代码例子

 

 

 

 

 

 

 

原文:http://www.devdiv.com/iOS_iPhone-%E7%94%A8_UITableView_%E8%BF%9B%E8%A1%8C%E5%A4%9A%E9%80%89%E7%9A%84%E4%BB%A3%E7%A0%81%E4%BE%8B%E5%AD%90-thread-71672-1-2.html

1 楼 bear1122ccc 2012-04-01  
文件坏了。

    
[3] 内容替引用别人的文章,备自己学习之用
    来源: 互联网  发布时间: 2014-02-18
内容为引用别人的文章,备自己学习之用.
==============
在application 节点配置首先启动的Activity 节点
<activity android:name=".HelloActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>
=============
获取当前屏幕的宽和高
WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
  Display display = manager.getDefaultDisplay();
Display display = manager.getDefaultDisplay();
  this.screen_width = display.getWidth();
  this.screen_height = display.getHeight();
=============
win7 磨砂效果
Window window = dialog.getWindow();
   window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
     WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
=============
设置屏幕默认为横屏
  android:screenOrientation="landscape"
设置屏幕默认为竖屏
android:screenOrientation="portrait"
=============
  去除窗体的标题栏
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
     
去掉任务栏
this.getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
       
这个方法必须放在以上两个方法之后
this.setContentView(layoutResID);

================
ContentProvider 使用表的形式来组织数据
各个程序都可以来访问这个数据
android中的ContentProvider 保存在android.provider中
每个ContentProvider 都有一个uri
提供的增删改查的函数方法:
主要意义在于提供在不同的程序之间实现数据共享
实现一个CongtentProvider的步骤
1、定义一个CONTENT_URI常量
2、定义一个类,继承ContenProvider
3、实现query 、insert、 update 、delete、getType 和onCreate方法
4、在AndroidManifest.xml 当中声明

================
Activity 之间的跳转
Activity01 中启动Activity02
Intent inetnt1 = new Intent(Activity01.this,Activity2.calss)
stratActivity(intent1);
startActivityForResult(intent1,REQUEST_CODE);
startActivityForResult() 这个方法启动intent,并且挡墙新的Activity 运行结束的时候,还必须执行原Activity 里面的回调函数onActivityResult().

================
关于权限问题

===============
指定layout
LayoutInflater factory = LayoutInflater.from(NotePad.this);
==================
响应手机返回按钮事件

@Override
public void onBackPressed() {
  AlertDialog.Builder builder = new AlertDialog.Builder(ManagerView.this);
  builder.setMessage("是否退出程序");
  builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    ManagerView.this.finish();
   }
  });
  builder.show();
  // super.onBackPressed();
}
================
响应MENU按钮创建菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  // MenuItem item_1 = menu.add(0, 0, 0, "1");
  // item_1.setOnMenuItemClickListener(new ItemClickListenerClass());
  MenuItem item_0 = menu.add(0, 0, 0, "EXIT");
  item_0.setOnMenuItemClickListener(new ItemClickListenerClass());
  MenuItem item_1 = menu.add(0, 1, 1, "About");
  item_1.setOnMenuItemClickListener(new ItemClickListenerClass());
  MenuItem item_2 = menu.add(0, 2, 2, "UPdate");
  item_1.setOnMenuItemClickListener(new ItemClickListenerClass());
  MenuItem item_3 = menu.add(0, 3, 3, "Connect US");
  item_1.setOnMenuItemClickListener(new ItemClickListenerClass());
  return super.onCreateOptionsMenu(menu);
}
=================
上下文菜单
创建
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  menu.setHeaderTitle("选项");
  menu.setHeaderIcon(R.drawable.menu_set);
 
  menu.add(0, 0, 0, "新建记事项");
  menu.add(0, 1, 1, "保存记事");
  menu.add(0, 2, 2, "清空当前");
  menu.add(0, 3, 3, "查看记事");
 
  super.onCreateContextMenu(menu, v, menuInfo);
}
/**
  * 上下文菜单的响应事件
  */
/*
  * (non-Javadoc)
  *
  * @see android.app.Activity#onContextItemSelected(android.view.MenuItem)
  */
@Override
public boolean onContextItemSelected(MenuItem item) {
  AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
    .getMenuInfo();
  switch (item.getItemId()) {
  case 0:
   break;
 
}
  return super.onContextItemSelected(item);
}
==================
   对listview 中我们可以调用Android中默认的布局模式
Android.R.layout.simple_list_item_1 每一项只有一个textview
Android.R.layout.simple_list_item_2  每一项有两个TextView
Android.R.layout.simple_list_item_single_choice  每一项有一个TextView  但是这个项可以被选择

=================
Dialog 类是继承的是 object
progressDialog 中不需要Builder 这个内部类来构造,可以直接调用构造函数


=================
设置显示字体为系统里面的字体
Android:textAppearance="?Android:attr/textApperanceMedium"


====================
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}

static class ViewHolder {
TextView text;
ImageView icon;
}

=====================
关于SQLite 数据库的操作
继承SQLiteOpenHelper类新建一个数据库
public class DBUtil extends SQLiteOpenHelper {

private static final String SQL_STRING = "create table test_sqlite(_id integer primary key autoincrement,username varchar(40),birthdate date)";

private static final String DB_NAME = "testsqlite.db";
private static final int DB_VERSION = 1;

/**
  *
  * @param context 上下文环境
  * @param name 创建数据库的文件名
  * @param factory 游标工厂
  * @param version 数据库创建的版本
  */
public DBUtil(Context context, String name, CursorFactory factory,
   int version) {
  super(context, name, factory, version);
  
}

public DBUtil(Context context) {
  this(context, DB_NAME, null, DB_VERSION);
  
}

/**
  * 创建数据库函数,回调函数,在程序运行中只会调用一次
  */
@Override
public void onCreate(SQLiteDatabase db) {
  System.out.println("onCreate()............");
  db.execSQL(SQL_STRING);
 
}

/**
  * 更新数据库
  */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  
  db.execSQL("drop table if exists testsqlite");
  onCreate(db);
}

public void closeDB(SQLiteDatabase db){
  if(db != null){
   db.close();
  }
}

public void closeCursor(Cursor c){
  if(c != null){
   c.close();
  }
}
}
======================
对于SQLite 数据库的基本操作语句:
插入操作:
对数据库中插入一个USERVO 对象
public void insertUserVO(UserVO user){
 
  DBUtil util = new DBUtil(context);
  // 得到一个可以写的 数据库,执行这个方法后 数据库才真正创建
  SQLiteDatabase db = util.getWritableDatabase();
  //ContentValues  一个map类存放键值对,一个键值对 键表示数据库中的列名
  ContentValues values = new ContentValues();
  values.put("username",user.getUsername());
  values.put("birthdate", ConvertDate.datetoString(user.getBirthdate()));
 
  db.insert("test_sqlite", null, values);
 
 
}
查询操作:
public Cursor findAll(){
  DBUtil util = new DBUtil(context);
  SQLiteDatabase db = util.getReadableDatabase();
 
  //查询的列名的string 数组
  String[] colnames = new String[]{"_id","username","birthdate"};
 
  String selection = "userid = ? and username=?";
  String[] selectionArgs = new String[]{"1","saf"};
  String groupBy = "userid";
  String having = "userid <10";
  String orderBy = "userid asc";
 
  Cursor c = db.query("test_sqlite", colnames, null, null, null, null, null);
  while(c.moveToNext()){
   System.out.println(c.getColumnName(0)+"  "+c.getColumnName(1)+"  "+c.getColumnName(2));
   System.out.println(c.getInt(0)+"  "+c.getString(1)+"   "+c.getString(2));
 
  }

  return c;
 
}
//查询的一些列方法:
-----------
public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 
distinct: true 表示去掉重复的行
table :表名
colums :查询的列的string 数组
selection:表示查询的条件 包含关键字 where  类似 selection = “name=?”;
selectionArgs :表示 填充的是 ? 代表的值的一个string数组
limit 限制返回的记录条数
-----------
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
-----------
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
-----------
public Cursor rawQuery (String sql, String[] selectionArgs)
-----------
//修改数据的方法
public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
-----------
//删除数据
public int delete (String table, String whereClause, String[] whereArgs)
O(∩_∩)O每天进步一点点O(∩_∩)O 该BLOG供个人记录学习笔记,如有错误欢迎指出!

    
最新技术文章:
▪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中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3