我有一个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,如果不是那么它取消了吐司和计时器任务
我不认为你应该改变的是,敬酒是为了工作的方式;这实际上只是对用户的快速响应。您应该设计它,以便屏幕上有一个信息窗口,并且需要它。 – 2014-10-16 13:27:29
Toast请求堆栈意味着它们可以在应用程序被杀后很长一段时间显示,更不用说留下了。 – dominik4142 2014-10-16 13:28:32
@JaySnayder and dominik您的意见与站在什么不用烤面包。这个问题真的不是祝酒,而是在浏览应用程序时取消它的正确位置和方式。在我的情况下坚持烤面包已经使用了一个时间任务,所以杀死时间任务结束了烤面包。我只是无法找到正确的方式 – 2014-10-16 13:33:12