Java 如何隐藏Toast messag以防出现

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,。。。。然后,在

我有两个活动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);