9

私は次のコードを持っています:

private Toast movieRecordToast;

    private void displayNextMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
        movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
        movieRecordToast.show();

    private void displayPrevMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel();
        movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
        movieRecordToast.show();        

ただし、displayNextMovieすばやく数回呼び出されてから呼び出された場合はdisplayPrevMovie、「次へ」トーストが引き続き表示され、その後にのみ「前へ」が表示されます。キャンセルが正しく機能していないようです。

4

3 に答える 3

29

Toast新しいテキストを表示するたびに新しいオブジェクトを作成する代わりに、 1つのオブジェクトだけを簡単に保持して、必要なときToastに現在のオブジェクトをキャンセルToastできます。次Toastが表示される前に、Toast.setText()機能を使用してテキストを変更できます。

サンプルコード:

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();
}
于 2011-03-31T18:55:31.380 に答える
0

次/前の情報をユーザーに表示する方法はたくさんあると思います。私は乾杯を完全に捨てて、TextViewのテキストを次/前の映画の名前で更新します。それはあなたの問題を取り除き、またIMHOはより良いUIを作ります。

ただし、設計要件でトースト通知が必要な場合は、次のことを試してください。

    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();    }    
于 2011-03-31T17:38:04.377 に答える
0

wroclaiのソリューションは素晴らしいです!ただし、長いメッセージトーストから短いメッセージトーストに、またはその逆に移動する場合は、トーストをねじ込みます。以前のオブジェクトを使用する代わりにこれを修正するには、それを再作成します。したがって、この行の代わりに:
mToastText.setText(message);
これを書いてください:myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
アニメーションも見栄えがします:)

于 2015-02-04T20:28:21.377 に答える