web-dev-qa-db-ja.com

フラグメント内でトーストを使用する

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

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は表示されません。

55
mammadalius

show()で作成しているToastmakeText()を呼び出していません。

109
CommonsWare

Alfo888_ibgが述べているように:

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

ただやる:

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

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

48
user2564789

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

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
20
alfo888_ibg

フラグメントでトーストを作成するときは、次のようにします。

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

クラスがフラグメントを拡張する場合、フラグメントはアクティビティのsubclassであるため、getActivity()を使用する必要があります。

チアーズ

12
Sindri Þór

GetActivity()で現在のアクティビティを取得できます

Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();
7
andy bit1

フラグメント内でトーストを作る

 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();
6
Ramesh

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


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

Androidフラグメント内でToastを呼び出す場合:

1. Activity mActivity=this.getActivity();  

2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show();

これは私のために動作します。

1
Lakshan Vithana

ユニークなアプローチ

(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();
}
}
0
Khemraj