FragmentActivity
内にタブのセットがあり、それぞれが独自のフラグメントを保持しています。そのフラグメント内からonClickListener
を介してstartActivity(myIntent)
メソッドを使用して新しいアクティビティを開始しようとすると、アプリケーションの強制が終了します。
しばらく見て回った後、startActivityFromFragment
というメソッドへの参照を見つけましたが、1時間ほど検索した後、その使用方法の説明や例が見つかりません。私が使用すべきもの。
私が尋ねているのは、アクティビティから新しいアクティビティを起動することと、フラグメントから新しいアクティビティを起動することとの間に違いがあるかどうかであり、そうであれば、何を実装する必要がありますか?
getActivity().startActivity(myIntent)
で実行する必要があります
私はそれをやりました、以下のコードは私のために働いています....
@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に表示されません。その解決策はありますか?
フラグメントからアクティビティを開始することとアクティビティを開始することの違いは、どちらの場合もアクティビティでなければならないため、コンテキストを取得する方法です。
アクティビティから:コンテキストは現在のアクティビティです(this
)
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
フラグメントから:コンテキストは親アクティビティです(getActivity()
)。フラグメント自体がstartActivity()
を介してアクティビティを開始できることに注意してください。これはアクティビティから実行する必要はありません。
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
複数のアクティビティに表示される(カスタム)メニューフラグメントから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);
}
});
...
フラグメントが存在するアクティビティのベースコンテキストを使用して、インテントを開始します。
Intent j = new Intent(fBaseCtx, NewactivityName.class);
startActivity(j);
ここで、fBaseCtx
は現在のアクティビティのBaseContext
です。 fBaseCtx = getBaseContext();
として取得できます