需要在点击后立即显示Toast

Need to display Toast right after click

我看到了这样的相关帖子 - Disable the Asynchronous display of a Toast [duplicate] 我尝试了那里的 cancel() 方法,但它们没有解决我的问题。可能是因为一些与 Preference Activity 相关的差异。

请帮助我改进我的代码,以便 Toast 在单击后立即显示。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.pref_screen);
    Context context = getApplicationContext();
    settings = PreferenceManager.getDefaultSharedPreferences(context);
    settings.registerOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
    Toast theToast;
    theToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG);

    if(key.equals("checkbox_key")){
        theToast.show();
    }
    if (key.equals("checkbox_key")&& theToast != null){
        theToast.cancel();
    }
}

你的问题措辞不当,但我假设(在阅读你的代码之后)你问的是当你 check/uncheck 一个新框并想要显示一个新 Toast 时如何取消当前显示的 Toast在那种情况下马上。

问题是您正在取消刚刚制作的 Toast,而不是之前创建的正在显示的 Toast。

尝试将 Toast 存储在成员变量中,然后取消它。类似于:

private Toast mCurrerntToast = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    //...
}

public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
    if(key.equals("checkbox_key")){
        //If there is a previous toast displayed, cancel it
        if(mCurrentToast != null){
            mCurrentToast.cancel();
        }

        //Display a new, more current Toast message
        mCurrentToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG);
        mCurrentToast.show();
    }
}

如果我对您所问内容的假设有误,请告诉我,我会尽力提供更多帮助,但我很确定这就是您要解决的问题。