2014-10-16 62 views
0

我有一个FragmentA..that是一个列表片段,它加载一个联系人列表,并显示它们类似于电话簿将做什么。现在如果我点击一个联系人说“John Doe”应用程序将启动另一个应用程序(在我的情况下为Sim Tool Kit),并显示用户的姓名和号码以供用户在使用STK时使用。一旦用户完成使用STK或导航回应用程序,然后应该消失。但在我的情况下,吐司仍然存在,并且在某些情况下,即使我退出我的应用时,吐司也会无限显示。我该如何纠正?下面是我的代码的片段坚持吐司列表项点击哪个启动另一个应用程序

list.setOnItemClickListener(new OnItemClickListener() { 
    @SuppressLint("RtlHardcoded") 
    @SuppressWarnings("deprecation") 
    public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 
     @SuppressWarnings("unchecked") 
     HashMap<String, String> h = (HashMap<String, String>) list.getAdapter().getItem(position); 
     String Name="",Number=""; 
     Name = h.get(KEY_NAME); 
     Number = h.get(KEY_PHONENUMBER); 

     toast = Toast.makeText(context, "", Toast.LENGTH_LONG); 
     toast.setGravity(Gravity.TOP|Gravity.RIGHT, 0, 0); 
     toast.setView(layout); 
     toast.cancel(); 

     userNameText.setText(Name); 
     userNumberText.setText(Number); 
     PersistToast(); 
     getActivity().startService(ServiceIntent); 

     try { 
      if (!ReceiverON) { 
       getActivity().registerReceiver(objReceiver, filter); 
       ReceiverON=true; 
      } 
     } catch (IllegalArgumentException illegalargumentexception) { 
      illegalargumentexception.printStackTrace(); 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    } 
} 

的持续吐司方法

private void PersistToast() { 
    long delay = 1000; 
    long period = 1000; 
    mDoTask = new TimerTask() { 
     @Override 
     public void run() {      
      toast.show(); 
     } 
    }; 

    mT.scheduleAtFixedRate(mDoTask, delay, period); 
} 

接收机

private class Receiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent arg1) { 
     if (!(currentTask().equals("com.android.stk"))){ 
      try { 
       if(toast != null) { 
        toast.cancel(); 
        mDoTask.cancel(); 
       } 
      } catch(Exception e) { 
      } 
     } 
    } 
} 

public String currentTask() { 
    return ((android.app.ActivityManager.RunningTaskInfo)((ActivityManager)context.getSystemService("activity")).getRunningTasks(1).get(0)).topActivity.getPackageName().trim(); 
} 

服务坪接收周期性,使得接收机依次检查,如果当前前面的活动是STK,如果不是那么它取消了吐司和计时器任务

+0

我不认为你应该改变的是,敬酒是为了工作的方式;这实际上只是对用户的快速响应。您应该设计它,以便屏幕上有一个信息窗口,并且需要它。 – 2014-10-16 13:27:29

+0

Toast请求堆栈意味着它们可以在应用程序被杀后很长一段时间显示,更不用说留下了。 – dominik4142 2014-10-16 13:28:32

+0

@JaySnayder and dominik您的意见与站在什么不用烤面包。这个问题真的不是祝酒,而是在浏览应用程序时取消它的正确位置和方式。在我的情况下坚持烤面包已经使用了一个时间任务,所以杀死时间任务结束了烤面包。我只是无法找到正确的方式 – 2014-10-16 13:33:12

回答

0

这是烤面包的滥用,不是为这些任务设计的。从android 4.1用户甚至可以禁用应用程序的通知(这也会禁用应用程序的敬酒) - 所以敬酒是不可靠的,应该只显示额外的信息,可以忽略不计。

您的方法是使用叠加活动。见How to create always-top fullscreen overlay activity in Android

+0

我的点击开始一个活动(STK),所以我不能使用你的方法.. – 2014-10-16 14:15:47

+0

这是独立的事件。您可以逐个开始2个活动。所以这是可能的。 – curioushikhov 2014-10-16 14:27:58

+0

让我试试你建议的活动方法... – 2014-10-16 14:39:49

相关问题