ユーザーがフラグメント内のボタンをクリックしたときにトーストメッセージを表示しようとしています。問題は、アクティビティにアクセスしてトーストを表示できないことです。
Fragment
のソースは次のとおりです。
public class FrgTimes extends Fragment
{
ScrollView sv;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
if (container == null) { return null; }
sv = (ScrollView)inflater.inflate(R.layout.frg_times, container, false);
btnTime1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//****** HERE's the PROBLEM ********
Toast.makeText(<The Activity>, "Please long press the key", Toast.LENGTH_LONG );
}});
return sv;
}
そして、これが私が試したものです。
Toast.makeText( getActivity() , ...
Toast.makeText( getView().getContext() , ...
Toast.makeText( getActivity().getApplicationContext() , ...
Toast.makeText( sv.getContext() , ...
Toast.makeText( sv.getRootView().getContext() , ...
デバッグでは、これらのコードはすべて例外なく実行されますが、TOAST
は表示されません。
show()
で作成しているToast
でmakeText()
を呼び出していません。
Alfo888_ibgが述べているように:
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
ただやる:
Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();
これは私のために働いた。
同じ問題を抱えている他の人を助けるために、フラグメント内でトーストを使用することに対する完全な答えは次のとおりです。
Activity activity = getActivity();
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
フラグメントでトーストを作成するときは、次のようにします。
Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();
クラスがフラグメントを拡張する場合、フラグメントはアクティビティのsubclassであるため、getActivity()を使用する必要があります。
チアーズ
GetActivity()で現在のアクティビティを取得できます
Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();
フラグメント内でトーストを作る
Toast.makeText(getActivity(), "Your Text Here!", Toast.LENGTH_SHORT).show();
OR
Activity activityObj = this.getActivity();
Toast.makeText(activityObj, "Your Text Here!", Toast.LENGTH_SHORT).show();
OR
Toast.makeText(this, "Your Text Here!", Toast.LENGTH_SHORT).show();
user2564789が正しいと言った
ただし、getActivity()
の代わりにthis
を使用することもできます
これにより、トーストは次のようになります
Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();
Androidフラグメント内でToastを呼び出す場合:
1. Activity mActivity=this.getActivity();
2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show();
これは私のために動作します。
(Dialog、Fragment、Even Utilクラスなどでも機能します...)
ApplicationContext.getInstance().toast("I am toast");
それに応じて、アプリケーションクラスに以下のコードを追加します。
public class ApplicationContext extends Application {
private static ApplicationContext instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static void toast(String message) {
Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
}
}