2012-08-22 16 views
44

私はFragmentActivityの中にそれぞれ独自の断片を保持するタブのセットを持っています。そのフラグメント内からonClickListener経由で新しいアクティビティを開始しようとしたときにstartActivity(myIntent)メソッドを使用すると、アプリケーションが強制終了します。フラグメント内からアクティビティを開始するにはどうすればよいですか?

しばらく見て回ったところ、startActivityFromFragmentという名前のメソッドが見つかりましたが、1時間程度検索した後で、それを使用する方法や例が見つかりません。私は何を使用するべきですか?

私は、アクティビティから新しいアクティビティを開始してからフラグメントから新しいアクティビティを開始することに違いがあるかどうかを確認していますか?そうであれば、実装する必要はありますか? MenuFragmentクラスで

:あなたは私が複数のアクティビティに表示されます(カスタム)メニューフラグメントからSendFreeTextActivityを起動するには、このようにそれを行うgetActivity().startActivity(myIntent)

+1

郵便番号やアプリの力が閉じたときのためにlogcat出力 – Squonk

+1

'FragmentActivity.startActivityFromFragment()' 'Activity.startActivityFromFragmentその動作を実装するためにFragment.startActivityForResult()' 'で呼ばれており、()'このアクティビティのFragmentが 'startActivity()'を呼び出すときに呼び出されます。直接呼び出す必要はありません。 – naXa

答えて

47

@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); 
     } 
    }); 
    ... 
+0

私は実際にはちょっと試してみました - onClickListener内で私は意図を設定してから、getActivity()を呼び出します。startActivity(myIntent) - 特にフラグメントやアクティビティを終了するために何かを追加する必要がありますか? –

+7

@EkKoZ:これは必須ではありません。'Fragment'の' startActivity(Intent intent) 'メソッドは事実上同じことをします。 – Squonk

+0

これは確かですが、文脈のスコープに問題があると思っていました。 – EkKoZ

6

でそれを行う必要があります

41

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

@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に表示されていません。

+0

が動作しています。しかし、それは私にとってはうまくいきます。しかし、どのように動作するのか理解できません:-(.. onClickメソッドは直接? –

1

フラグメントが存在するアクティビティの基本コンテキストを使用してインテントを開始します。 fBaseCtxがあなたの現在の活動のBaseContextある

Intent j = new Intent(fBaseCtx, NewactivityName.class);   
startActivity(j); 

fBaseCtx = getBaseContext();

7

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

コンテキストフラグメントから現在のアクティビティ(this

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

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

Intent intent = new Intent(getActivity(), NewActivity.class); 
startActivity(intent); 
関連する問題