How to cancel Toast created in a different method on android?

前端 未结 3 387
隐瞒了意图╮
隐瞒了意图╮ 2020-12-19 03:25

I have the following code:

private Toast movieRecordToast;

    private void displayNextMovie() {
        if (movieRecordToast != null) movieRecordToast.canc         


        
相关标签:
3条回答
  • 2020-12-19 03:54

    The wroclai's solution is excellent! However it screws the Toast when going form long message toast to short one and vice versa. To fix this instead of using previous object recreate it. So instead of this line:
    mToastText.setText(message);
    write this one: myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
    The animations also looks better :)

    0 讨论(0)
  • 2020-12-19 04:04

    I think there are many ways you can achieve displaying the next/prev info to the user. I would ditch the toasts altogether and update the text of a TextView with the name of next/prev movie. That would eliminate your problem and also IMHO makes for better UI.

    However, if your design requirements do ask for toast notifications, try:

        private Toast nextMovieRecordToast;
    private Toast prevMovieRecordToast;
    
    
    private void displayNextMovie() {
        if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
        nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
        nextMovieRecordToast.show();}
    
    private void displayPrevMovie() {
        if (nextMovieRecordToast != null) nextMovieRecordToast.cancel();
        prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
        prevMovieRecordToast.show();    }    
    
    0 讨论(0)
  • 2020-12-19 04:17

    Instead of creating a new Toast object each time you want a new text displayed you can easily hold on to only one Toast object and cancel the current Toast whenever you want. Before the next Toast is being displayed you can change text with Toast.setText() function.

    Sample code:

    private Toast mToastText;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        // Create the object once.
        mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    }
    
    private void displayText(final String message) {
        mToastText.cancel();
        mToastText.setText(message); 
        mToastText.show();
    }
    
    0 讨论(0)
提交回复
热议问题