56

の中にタブのセットがあり、FragmentActivityそれぞれが独自のフラグメントを保持しています。そのフラグメント内から、を介して新しいアクティビティを開始しようとしたときに、メソッドonClickListenerを使用するstartActivity(myIntent)と、アプリケーションフォースが閉じます。

しばらく見て回ったところ、というメソッドのリファレンスが1つか2つ見つかりましたstartActivityFromFragmentが、1時間ほど検索したところ、使い方の説明や例、これが私が使うべきものかどうかがわかりません。 。

私が質問しているのは、アクティビティから新しいアクティビティを起動することと、フラグメントから新しいアクティビティを起動することの間に違いがあるかどうかです。違いがある場合は、何を実装する必要がありますか?

4

5 に答える 5

50

あなたはそれを行うべきですgetActivity().startActivity(myIntent)

于 2012-08-22T13:52:49.507 に答える
45

私はそれをやった、以下のコードは私のために働いている....

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.hello_world, container, false);

        Button newPage = (Button)v.findViewById(R.id.click);
        newPage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), HomeActivity.class);
                startActivity(intent);
            }
        });
        return v;
    }

宛先アクティビティが Manifest.xml ファイルに登録されていることを確認してください。

しかし、私の場合、すべてのタブが HomeActivity に表示されていません。そのための解決策はありますか?

于 2013-05-20T08:00:04.937 に答える
13

フラグメントからアクティビティを開始する場合とアクティビティから開始する場合の違いは、コンテキストを取得する方法です。どちらの場合もアクティビティでなければならないためです。

アクティビティから: コンテキストは現在のアクティビティです ( this)

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

フラグメントから: コンテキストは親アクティビティ ( getActivity()) です。フラグメント自体が を介してアクティビティを開始できることに注意してくださいstartActivity()。これはアクティビティから行う必要はありません。

Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
于 2016-10-09T10:44:35.480 に答える
6

複数のアクティビティに表示される (カスタム) メニュー フラグメントから SendFreeTextActivity を起動するには、次のようにします。

MenuFragment クラス:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);

    final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
    sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "sendFreeTextButton clicked");
            Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
            MenuFragment.this.startActivity(intent);
        }
    });
    ...
于 2013-01-25T12:17:43.957 に答える