2017-07-19 8 views
0

私はここに新しいです、これは尋ねるには厄介な質問である場合は謝罪します。しかし、これら2つのバージョンのコードの違いを知りたいと思います。Toast.makeText(...)とtoastObj.makeText(...)が異なる動作をするのはなぜですか?

1)これはトーストが瞬時に変更できるようにします。

public Toast toast; 
public void showToast(String text) 
{ 
    if (toast != null) 
    { 
     toast.cancel(); 
    } 
    toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG); 
    toast.show(); 
} 

2)これは瞬時に変化しません。

public Toast toast; 
public void showToast(String text) 
{ 
    if (toast != null) 
    { 
     toast.cancel(); 
    } 
    toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); 
} 

なぜtoast class.makeTextでなくtoastObject.makeTextである必要がありますか? これは、show()メソッドを別にする必要があるからですか? 私はまだJavaとAndroidの新しいですが、誰かが2つの基本的な違いは何かを説明することができますか?前もって感謝します。 MAKETEXTは()だから、

import android.widget.Toast; 

としてインポートされたトーストクラスから来るので

+1

fyiの場合、ifは決して入力されません。つまり、 'toast'は常にnullになります。それは宣言されていますが、インスタンス化されていません。 –

+1

'toast!= null'はどのようにして渡され、いつもnullになるでしょう。 – tyczj

+0

である必要があるため、これはあなたのアプリをクラッシュさせない方法です。 'makeText()'は 'static'と宣言されています。[documentationを参照](https://developer.android.com/reference/android/widget/Toast.html#makeText –

答えて

1

それは、それはそれは、クラス名で呼ばれる必要があるので、静的メソッドです。

.show(); 

別々である必要はありません。

ので、

toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); 

は動作します。

+1

基本的に静的/名前空間vsインスタンス – oooyaya

+0

@oooyayaはい: ) –

+0

オブジェクトは私が知っているものから静的メソッドを呼び出すことができますが、なぜ同じ方法で実行されませんか? –

0

makeText()の方法Toastクラスは静的メソッドです。

したがって、静的メソッドにアクセスする必要がある場合は、そのメソッドをClassName.method()で呼び出す必要があります。

ここでも、ToastクラスではmakeText()が静的​​メソッドであるため、ここではやっています。

関連する問題