Java 如何隐藏Toast messag以防出现
我有两个活动A活动和B活动,在B活动中有一个片段,我用BlogRecycleadapter类中的一个项目列表填充了它 当Internet不可用时,在“B活动”中会显示“检查Internet”,但当我按“上一步”按钮并转到某个活动时,仍会显示“toast”消息 如何在第一个活动(即活动)中隐藏祝酒词信息 我的循环水课程是 BlogRecyclerAdapter.java 创建成员Toast mToast=null并将其设置为mToast=Toast.makeTextcontext,。。。。然后,在活动中Java 如何隐藏Toast messag以防出现,java,android,android-studio,android-arrayadapter,android-adapter,Java,Android,Android Studio,Android Arrayadapter,Android Adapter,我有两个活动A活动和B活动,在B活动中有一个片段,我用BlogRecycleadapter类中的一个项目列表填充了它 当Internet不可用时,在“B活动”中会显示“检查Internet”,但当我按“上一步”按钮并转到某个活动时,仍会显示“toast”消息 如何在第一个活动(即活动)中隐藏祝酒词信息 我的循环水课程是 BlogRecyclerAdapter.java 创建成员Toast mToast=null并将其设置为mToast=Toast.makeTextcontext,。。。。然后,在
@Override
protected void onPause() {
super.onPause();
if(mToast != null) {
mToast.cancel();
}
}
现在的情况是,在你的活动中有三个地方,你称之为:
InternetStatus.getInstance(holder.blogLikeBtn.getContext()).isOnline()
如果你没有互联网,你将调用这行代码三次,三个祝酒词将被创建,依次出现;一个接一个:
Toast.makeText(context, "Check Internet", Toast.LENGTH_SHORT).show();
您应该尝试合并您的代码,以便toast只显示一次。考虑下面的代码:
if (InternetStatus.getInstance(holder.blogLikeBtn.getContext()).isOnline()) {
//Get Likes
firebaseFirestore.collection("Posts/" + blogPostId + "/Likes").document(currentUserId).addSnapshotListener(((Main2Activity) context), new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "listening failed", e);
return;
}
if (documentSnapshot.exists()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.blogLikeBtn.setImageDrawable(context.getDrawable(R.mipmap.action_like_accent));
} else {
holder.blogLikeBtn.setImageDrawable(context.getResources().getDrawable(R.mipmap.action_like_accent));
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.blogLikeBtn.setImageDrawable(context.getDrawable(R.mipmap.action_like_gray));
} else {
holder.blogLikeBtn.setImageDrawable(context.getResources().getDrawable(R.mipmap.action_like_gray));
}
}
}
});
holder.blogLikeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firebaseFirestore.collection("Posts/" + blogPostId + "/Likes").document(currentUserId).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(!task.getResult().exists()){
Map<String, Object> likesMap = new HashMap<>();
likesMap.put("timestamp", FieldValue.serverTimestamp());
firebaseFirestore.collection("Posts/" + blogPostId + "/Likes").document(currentUserId).set(likesMap);
} else {
firebaseFirestore.collection("Posts/" + blogPostId + "/Likes").document(currentUserId).delete();
}
}
});
}
});
holder.blogCommentBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent commentIntent = new Intent(context, CommentsActivity.class);
context.startActivity(commentIntent);
}
});
}else{
Toast.makeText(context, "Check Internet", Toast.LENGTH_SHORT).show();
}
}
在活动B的onBackPressed方法中,使用此
(new Handler()).postDelayed(new Runnable() {
@Override
public void run() {
super.onBackPressed();
}
}, Toast.LENGTH_SHORT);
Toast.LENGTH_SHORT是Toast显示的时间间隔,单位为毫秒
我们的目标是将回压延迟一段时间-Toast.LENGTH\u SHORT,正如我上面所做的
不要让这个祝酒词。表演台词。你的问题对我来说有点不清楚。你们写道:在B活动中,它显示“检查互联网”,但当我按下“上一步”按钮并移动到A活动时,仍然会显示“敬酒”消息。你的意思是当你按下“后退”按钮时吐司会再次显示,还是说即使活动A出现,吐司仍然可见?@Barns toast在活动本身中以1-2秒的间隔出现,这是主要活动…它出现然后消失…15-20秒后完全消失…奇怪的恐怖。我没有仔细查看了RecyclerView.Adapter的生命周期,但在onBindViewHolder方法中调用了toast三次。检查每次是否在线。是否有理由检查所有这些实例,例如blogCommentBtn,它们是否会同时脱机从而多次触发toast?您可以通过稍微更改toast消息来轻松测试这一点,检查Internet 1,检查Internet 2…正如我在下面的评论中提到的。我相信你不应该在你的RecyclerAdapter中检查在线状态,最肯定的是不要在你的onBindViewHolder方法中检查在线状态,因为每次添加一行时,检查isOnline的性能将变得非常昂贵!我认为您应该将在线状态检查移动到调用活动或片段,除非您能够为您的方法提供合理的理由。我应该在哪里创建成员Toast mToast=null??它在adapter类上的活动中吗?我应该在哪里放置mToast=Toast.makeText…如果我听起来很愚蠢,我很抱歉…但我开始在android上观看来自youtube和google的教程…所以我很难知道在哪里放置此元素。你应该在活动中创建和显示祝酒词。尝试在活动中创建方法public void showToastString msg{mToast=Toast.makeTextcontext,msg,Toast.LENGTH_SHORT;mToast.show;},并从适配器调用它。这不是一个好的解决方案。故意延迟应用程序以解决由编码人员引起的问题的症状。这不仅仅是toast,它可能是某种材质动画,在这种情况下,编码人员必须延迟!!在大多数著名的应用程序中,你都可以看到@巴恩斯但是,编码员在三个不同的if条件下用相同的方法调用toast三次,其中Isofline的条件肯定是相同的。我明白你的意思了,我刚刚写了一个通解,来消除他目前的问题!!在他的代码中可能还有其他的复杂性@BarnsYes,我相信OP的代码有一些问题。更具体地说,我认为没有理由在RecyclerAdapter中检查联机状态。在我看来,它应该在调用活动或片段中。现在我使用了您的方法…现在当我打开B活动时…Toast出现一次,当我按下后退按钮时…它再次出现在主活动中…当按下后退按钮时,我应该如何取消Toast以显示?而且我也没有使用您建议的方法,由于它在holder.button\u id之后的按钮id上引发了错误,所以我删除了两个else语句,并且没有删除if InternetStatus.getInstanceholder.blogLikeBtn.getContext.isOnline{并且只保留了最后一条else语句……正如您上面提到的。我已经发布了我的A活动代码。请检查您是否找到了代码??您能否建议为什么第二个吐司出现在从B活动到A的背面,以及如何隐藏它??
(new Handler()).postDelayed(new Runnable() {
@Override
public void run() {
super.onBackPressed();
}
}, Toast.LENGTH_SHORT);