74

ユーザーがフラグメント内のボタンをクリックすると、トーストメッセージを表示しようとしています。問題は、アクティビティにアクセスしてトーストを表示できないことです。

のソースは次の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表示されないことがわかります。

4

14 に答える 14

130

で作成していることを求めているのではありませshow()ん。ToastmakeText()

于 2012-05-26T21:56:04.983 に答える
67

alfo888_ibgが述べたように:

@Override
public void onClick(View arg0) {
   Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}

ただ行う:

    Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();

これは私のために働いた。

于 2013-07-17T14:26:16.843 に答える
24

同じ問題を抱えている他の人を助けるために、フラグメント内でトーストを使用するための完全な答えは次のとおりです。

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
于 2013-01-18T17:54:02.620 に答える
1

user2564789 は正しいと言ったが、代わりに which を使用して、トーストを次のようにする
こともできますthisgetActivity()


     Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();
    

于 2015-02-03T16:52:35.480 に答える
0

コトリンの使用

Toast.makeText(view!!.context , "your_text", Toast.LENGTH_SHORT).show()
于 2020-03-23T22:27:12.773 に答える
-1

独自のアプローチ

(Dialog、Fragment、Util クラスなどでも機能します...)

ApplicationContext.getInstance().toast("I am toast");

それに応じて Application クラスに以下のコードを追加します。

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();
}
}
于 2017-11-11T07:03:53.217 に答える
-1
        public void onClick(View v) {
            Context context = v.getContext();
            CharSequence text = "Message";
            int duration = Toast.LENGTH_SHORT;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }
于 2016-06-21T01:00:08.887 に答える