誰かが、フラグメント内で起こっていることに基づいてアクティビティアクションバーの内容を変更する方法の簡単な例を教えていただけますか?私の意図:Android:フラグメントからアクションバーのメニューアイテムを変更する
通常のメニュー項目 - >フラグメント内の何かが移動されます - >メニュー項目が保存/破棄ボタンに変わります。
私の最初のインパルスは、アクティビティとフラグメントの両方でブロードキャストレシーバをセットアップすることですが、これが正しいかどうかはわかりません。
誰かが、フラグメント内で起こっていることに基づいてアクティビティアクションバーの内容を変更する方法の簡単な例を教えていただけますか?私の意図:Android:フラグメントからアクションバーのメニューアイテムを変更する
通常のメニュー項目 - >フラグメント内の何かが移動されます - >メニュー項目が保存/破棄ボタンに変わります。
私の最初のインパルスは、アクティビティとフラグメントの両方でブロードキャストレシーバをセットアップすることですが、これが正しいかどうかはわかりません。
以下は私のために働く。私は、フラグメント内ListView.MultiChoiceModeListener
を実装するカスタムクラスを持っている:
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
// Choose the correct Action Bar menu to display
int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2;
// Configure to use the desired menu
mode.getMenu().clear();
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(menu);
}
あなたは「断片で何かが動いた」検出方法を考えると、ListView.MultiChoiceModeListener
を拡張することはあなたのために動作しない可能性があり、うまくいけば、これはメニューを変更する方法を示しています。鍵はActionMode
インスタンスにアクセスすることです。
contextual action modeを使いたいと思います。ドラッグイベントでは、新しいActionModeを開始します。これは、アクションバーの内容を、ユーザに許可したいメニュー項目に置き換えることができます。ユーザーがアクションを選択すると、アクションモードが終了し、アクションバーは元の状態に戻ります。
フラグメントはアクションバーのメニューを変更できます。そのためには、フラグメントのoncreate()
に必要なフラグを追加する必要があります。setHasOptionsMenu(true);
フラグメントがロードされると、アクティビティと同様にonCreateOptionsMenu(Menu menu, MenuInflater inflater)
に電話がかかります。次に、メニューに必要な変更を行います。
メニューをグローバルに分割して保存し、変更を加えたいときはいつでも適用します。
ONATTACH(アクティビティアクティビティ)を使用してFragmentActivityからアクションバーを取得するには、これを試してみてくださいアクションバーのインスタンスがメニューあなたと一緒に役立つだろう、しかし確実に有用であると考えられる場合
これははるかに正しい答えです。 –
わからないが...ここではそれについて取得する方法ですメソッドの中にあります。 YourFragmentクラスの
まず第一に、この
public class YourFragment extends Fragment {
private YourFragmentActivity context;
}
のような断片にあなたのFragmentActivityのグローバルオブジェクトを作成オーバーライドこの
@Override
public void onAttach(Activity activity){
context = (YourFragmentActivity)activity;
super.onAttach(activity);
}
はその後YourFragmentでのOnCreateメソッドでこの
を行います@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
...
android.support.v7.ActionBar actionBar = context.getSupportActionBar();
...
}
ここで、アクティビティのActionModeのインスタンスを取得できますか? – Neilers