構造は以下の通りです: 活動 - 断片 - クラスクラスでトーストを呼び出すには?私のプロジェクトの
問題:クラスにいくつかの条件に応じては、トースト
問題を示しています。私はしてクラスからコンテキストを呼び出すことはできません。 getActivity()
どのように最善の方法で解決しますか?いくつかのパブリッククラスまたは変数を作成しますか?
構造は以下の通りです: 活動 - 断片 - クラスクラスでトーストを呼び出すには?私のプロジェクトの
問題:クラスにいくつかの条件に応じては、トースト
問題を示しています。私はしてクラスからコンテキストを呼び出すことはできません。 getActivity()
どのように最善の方法で解決しますか?いくつかのパブリッククラスまたは変数を作成しますか?
Context
をクラスコンストラクタに送信するだけです。
private Context context;
public MyClass(Context ctx) {
context = ctx;
}
そしてトーストを表示するためにそれを使用します。このよう 。次のように
あなたは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);
}
}
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();
}
}
あなたの返信に感謝します。たぶんそれは最も適切な解決策ですが、私はコンストラクタを呼び出すことで最も簡単な方法に進むことを好むでしょう。しかし、ありがとう。 – tadvas
あなたの質問は非常に曖昧です。[mcve]の作成方法を検討することをおすすめします。 – Bryan
クラス(TextWatcher)からトーストを呼び出す必要があります - それはあいまいな質問ではありません – tadvas
あなたはリンクを読んでいますか?私はあなたが[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)も読むべきだと思います。どのように問題を解決しようとしたのか、問題を再現するためにコードを提供したことについての情報は提供していません。 * *あいまいな質問です。より多くの情報を提供することは、私たちがあなたを助けるのに役立ちます。 – Bryan