新しいフラグメントを起動して、データを表示したい。現在、私はそれぞれがフラグメントであるアクションバータブの束を持っているメインアクティビティを持っています。したがって、タブフラグメント内に、chartsButtonというボタンがあります。 onclicklistenerをすべて設定しました。onClickメソッドは次のとおりです。
public OnClickListener chartsListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent chartFragment = new Intent();
startActivity(chartFragment);
}
};
さて、私が言ったように、このリスナーはFragmentを拡張するクラス内にあります。そのため、画面全体を置き換える目的で、新しいフラグメント(chartsFragment)を起動します。ユーザーがクリックすると、タブとメインアクティビティに戻ります。ここに私のチャートの断片があります:
public class chartsFragment extends Fragment {
public View onCreateView() {
//LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return (inflater.inflate(R.layout.chartfragment, null));
}
}
現在扱っているエラー:「Android.content.ActivityNotFoundException:Intent {}を処理するアクティビティが見つかりません」。それは問題ありません。getActivity()。startActivity(chartsFragment)を使用できることを理解していますが、同じエラーが発生します。ここで探しているのは、新しいフラグメントを開く結果となるフラグメント内からインテントを起動する方法ですか?
新しいフラグメントを開くことはできません。フラグメントは常にアクティビティによってホストされる必要があります。フラグメントが同じアクティビティ(タブなど)にある場合、戻るキーナビゲーションはトリッキーになります。そのフラグメントで新しい画面を開きたいと思います。
したがって、新しいアクティビティを作成して、そこに新しいフラグメントを配置するだけです。そのアクティビティは、アクティビティクラスを介して明示的に、またはintent filter
sを介して暗黙的にインテントに反応します。
問題への答えは簡単です。現在のFragment
を新しいFragment
に置き換え、トランザクションをバックスタックにプッシュします。これにより、戻るボタンの動作が保持されます...
新しいActivity
を作成すると、とにかくフラグメントを使用するという全体の目的に反します...非常に非生産的です。
@Override
public void onClick(View v) {
// Create new fragment and transaction
Fragment newFragment = new chartsFragment();
// consider using Java coding conventions (upper first char class names!!!)
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
http://developer.Android.com/guide/components/fragments.html#Transactions
これを試してみてください:
public void ButtonClick(View view) {
Fragment mFragment = new YourNextFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, mFragment).commit();
}
これを試してみてください:
private void changeFragment(Fragment targetFragment){
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment, targetFragment, "fragment")
.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
}