2016-10-12 2 views
-1

構造は以下の通りです: 活動 - 断片 - クラスクラスでトーストを呼び出すには?私のプロジェクトの

問題:クラスにいくつかの条件に応じては、トースト

問題を示しています。私はしてクラスからコンテキストを呼び出すことはできません。 getActivity()

どのように最善の方法で解決しますか?いくつかのパブリッククラスまたは変数を作成しますか?

+1

あなたの質問は非常に曖昧です。[mcve]の作成方法を検討することをおすすめします。 – Bryan

+0

クラス(TextWatcher)からトーストを呼び出す必要があります - それはあいまいな質問ではありません – tadvas

+1

あなたはリンクを読んでいますか?私はあなたが[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)も読むべきだと思います。どのように問題を解決しようとしたのか、問題を再現するためにコードを提供したことについての情報は提供していません。 * *あいまいな質問です。より多くの情報を提供することは、私たちがあなたを助けるのに役立ちます。 – Bryan

答えて

0

Contextをクラスコンストラクタに送信するだけです。

private Context context; 

public MyClass(Context ctx) { 
context = ctx; 
} 

そしてトーストを表示するためにそれを使用します。このよう 。次のように

+0

ユースケースを知らずに 'Context'を渡すことはあなたの[メモリリークを引き起こす](http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html)の良い方法です応用。 – Bryan

+0

@Bryan OneはWeakReferenceを使うことができます。 –

+0

これはそれを行う1つの方法ですが、すべてのユースケースでは必要ありません。私はそのような小さな情報に基づいて答えを投稿することを躊躇していました。 – Bryan

0

あなたはActivityクラスでトーストを呼び出すことができます -

Context context = getApplicationContext(); 
CharSequence text = "Hello toast!"; 
int duration = Toast.LENGTH_SHORT; 

Toast toast = Toast.makeText(context, text, duration); 
toast.show(); 

を断片または別のクラスに表示するには、フラグメントのコンストラクタまたはその特定のクラスの活動やコンテキストの参照を渡す必要があります。例えば、

断片クラスで
Fragment fragment = new Fragment(activity); 

-

Class MyFragment extends Fragment{ 
    private Activity mActivity; 

    MyFragment(Activity activity){ 
     mActivity = activity; 
    } 

    void showToast(){ 
     Toast.makeText(mActivity, text, duration); 
    } 

} 
1

Witho多くのコンテキストをUT、私はActivity以外のクラスからToastメッセージをトリガお勧めできる唯一の方法は、Listenerインタフェースを使用することです:

public class Unknown { 

    public interface UnknownListener { 

     void displayMessage(CharSequence message); 

    } 

    private UnknownListener mUnknownListener; 

    private final String mToastMessage = "Unknown message"; 

    public Unknown() {} 

    public void setUnknownListener(UnknownListener listener) { 
     mUnknownListener = listener; 
    } 

    private void doSomething() { 
     if(mUnknownListener != null) { 
      mUnknownListener.displayMessage(mToastMessage); 
     } 
    } 

} 

その後の参照を削除することを確認して、あなたのActivityでインターフェイスを実装します対応するライフサイクルメソッド:

public class MainActivity extends AppCompatActivity implements Unknown.UnknownListener { 

    private Unknown mUnknown; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mUnknown = new Unknown(); 
     mUnknown.setUnknownListener(this); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mUnknown.setUnknownListener(null); 
    } 

    @Override 
    public void displayMessage(CharSequence message) { 
     Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 
    } 

} 
+0

あなたの返信に感謝します。たぶんそれは最も適切な解決策ですが、私はコンストラクタを呼び出すことで最も簡単な方法に進むことを好むでしょう。しかし、ありがとう。 – tadvas

関連する問題