当前位置: 首页 > 知识库问答 >
问题:

在单独的视图中显示所有挂起的通知

亢琦
2023-03-14

可能这是一个幼稚的问题,但我是初学者请不要认为是错误的问题。我搜索了很多,也跟着这个
http://developer.android.com/guide/topics/ui/notifiers/notifications.html教程。还有谷歌解决我的问题,但我找不到。

这是我的作业。

我在主活动中有一个EditText和一个按钮,当我单击该按钮时生成一个通知,当我打开该通知时另一个活动打开,显示我通过EditText在主活动中输入的Editext数据。

我的问题是....

当单击一个通知时,我希望在一个单独的活动中获得所有通知,就像收件箱中的消息一样。

例如,在我的主要活动中,我点击了10次按钮,所以实际上在一个通知窗口中会生成10个通知,count=10,但它显示的是count=1?当我打开通知时,它只会显示另一个活动中最新的通知内容,我如何在一个活动中显示剩下的9个??

下面在我的主要活动中....

Button btn;
EditText edtText;
NotificationCompat.Builder builder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (Button) findViewById(R.id.button);
    edtText = (EditText) findViewById(R.id.editText);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            CreteNotification(Calendar.getInstance().getTimeInMillis(), edtText.getText().toString());
        }
    });

}

protected void CreteNotification(long when, String data) {

    String notificationContent ="Notification Content Click Here to go more details";
    String notificationTitle ="This is Notification";
    int number = 1;
    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
    int smalIcon =R.drawable.ic_launcher;
    String notificationData = data;

    Intent intent = new Intent(getApplicationContext(), MyNotificationClass.class);
    intent.putExtra("Message", notificationData);
    intent.putExtra("Time", Integer.toString((int) when) );
    intent.setData(Uri.parse("content://"+when));
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationManager notificationManager =(NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
            .setWhen(when)
            .setContentText(notificationContent)
            .setContentTitle(notificationTitle)
            .setSmallIcon(smalIcon)
            .setAutoCancel(true)
            .setTicker(notificationTitle)
            .setLargeIcon(largeIcon)
            .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_VIBRATE| Notification.DEFAULT_SOUND)
            .setContentIntent(pendingIntent);

    // Start of a loop that processes data and then notifies the user
    // how to loop??????????????????

    notificationBuilder.setNumber(++number);

    Notification notification = notificationBuilder.getNotification();
    notificationManager.notify(1, notification);

}

要显示所有通知的代码?????

    HashMap<String, String> inboxMsg;
TextView notiTextView;
Button btn;
int Id;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_notification_class);

    inboxMsg =  new HashMap<String, String>();
    Id = 0;
    notiTextView = (TextView) findViewById(R.id.textView1);
    btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new OnClickListener() {  
        @SuppressWarnings("rawtypes")
        @Override
        public void onClick(View v) {

            Set<String> keys = inboxMsg.keySet();
            Iterator keyItra = keys.iterator();
            while (keyItra.hasNext()) {
                String k = (String) keyItra.next();
                String Message = inboxMsg.get(k);
                notiTextView.setText(Message);
            }
        }
    });

    if(savedInstanceState == null)
    {
        String Mesage  = getIntent().getExtras().getString("Message");
        String Time = getIntent().getExtras().getString("Time");
        inboxMsg.put(Integer.toString(++Id), "Message is " + Mesage + " Time " + Time + "\n");
    }
}

问题出在哪里,好心地引导我走上正确的道路,也好心地指导我如何做到这一点。

共有1个答案

百里泓
2023-03-14

您没有获得实际通知计数的原因是,每当cretenotification(long when,String data)方法被调用时,将number variable设置为1。它可以通过不在方法内部声明而使number成为类成员变量来解决。

Button btn;
EditText edtText;
NotificationCompat.Builder builder;
int number = 1;

.....

protected void CreteNotification(long when, String data) {
    .....
    notificationBuilder.setNumber(++number);
    ....
}

关于为每个通知启动不同的活动,在调用NotificationManager.Notify(ID,notification);方法时,需要为每个通知传递不同的“ID”,但请记住,如果指定不同的ID,则触发新通知不会更新计数,而是添加新通知。所以点击生成通知的按钮实际上会生成10个不同的通知。

 类似资料:
  • 我必须在我的Android应用程序中列出Firebase Firestore文档中的所有字段。如何落实? 例如在附上的截图中,我必须在我的App中显示文档“HiySLB7YW0DGE5B1MMPigreByJ03”中的所有字段。 文档截图

  • 我是JProfiler的新手。我创建了一个非常简单的测试应用程序。这是一个带有main方法的Main.java: 注意,我暂停直到按键。通过这种方式,我确信主作用域在我按下一个键之前不会结束,所以我希望e存在并且不会被垃圾收集(如果这个假设不正确,请纠正我)。示例类: 我使用JProfiler Eclipse插件启动上述应用程序。我创建了一个基于完整仪器配置文件的会话;我已经删除了Java EE和

  • 问题内容: 我有一个非标准的Spring MVC项目。用XML响应。是否可以创建一个视图(jsp页面),以显示所有接受的(不是必需的)控制器,映射和参数。 根据答案,我有: 我没有得到任何信息 问题答案: 随着Spring 3.1,你可以轻松浏览端点。 The controller : The view : 你也可以在Spring <3.1中使用代替。但是你不会获得相同级别的信息。 有了它们,你将

  • 在新版本2017.3中,他们增加了这个功能,但我找不到菜单来关闭它。

  • 什么是解决这个问题的好模式?或者有没有一种方法可以参数化核心表达式?我可以使用任何预定义的eclipse插件/命令/处理程序吗? 更新:相反,在我的独立RCP应用程序中使用Window>Show视图结构也是可以的--就像它存在于Eclipse工作台中一样。有没有办法通过使用任何预定义的/可用的手段来添加这个菜单(条目)?

  • 我必须使用Streams API从给定文件中查找所有最长的单词。我只做了几步,但寻找一些“一行”,实际上我处理整个文件两次,第一次是找到单词的最大长度,第二次是比较所有单词和最大长度,假设它不是性能最好的;有人能帮我吗?看看代码: 我想澄清一下: 文件每行只包含一个单词,无论如何这并不重要——问题是关于正确的流代码。