OnCreateOptionsMenu() 未在 Fragment 中调用

2024-05-07

我有一个应用程序,它有一个活动,其中有两个水平放置的片段。

在我的活动中,我使用了膨胀菜单onCreateOptionsMenu()使用它我可以显示操作栏选项菜单。但是,当我尝试从我的片段之一更新操作栏菜单项时,onCreateoptionsmenu()不被调用。因此,我无法更新操作栏选项菜单。

我的活动中的代码如下:

myActivity.java

package com.andr.androidtablelist;

import java.io.IOException;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

import com.andr.fragments.ListLeftFragment;
import com.andr.utils.DBHelper;

      public class TabletActivity extends Activity {
    ActionBar actionBar = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DBHelper dbhelper;
        dbhelper = new DBHelper(this);
        try {
            dbhelper.createDatabase();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        setContentView(R.layout.activity_tablet);
        actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(false);
        getFragmentManager().beginTransaction()
                .replace(R.id.master, ListLeftFragment.newInstance()).commit();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.tablet, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            Toast.makeText(
                    getApplicationContext(),
                    "Back Stack Count::"
                            + getFragmentManager().getBackStackEntryCount(),
                    Toast.LENGTH_LONG).show();
            if (getFragmentManager().getBackStackEntryCount() == 1) {
                actionBar.setDisplayHomeAsUpEnabled(false);
            }
            if (getFragmentManager().getBackStackEntryCount() > 1) {
                getFragmentManager().popBackStack();

            }
            return true;

        }
        return super.onOptionsItemSelected(item);
    }

}
      // http://www.vogella.com/articles/AndroidListView/article.html

myFragment.java

      package com.andr.fragments;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;

import com.andr.androidtablelist.R;
import com.andr.helper.LazyHelper;

   public class ListLeftFragment extends Fragment{
    private static ListLeftFragment listFragment = null;

    public static ListLeftFragment newInstance(){
        listFragment = new ListLeftFragment();      
        return listFragment;
    }

     @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);


    }

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
         View v =  inflater.inflate(R.layout.fragment_listlayout, container,false);
         getActivity().invalidateOptionsMenu();
         ListView lv = (ListView)v.findViewById(R.id.lview);
         String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                    "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
                    "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
                    "Android", "iPhone", "WindowsMobile" };
         getActivity().getActionBar().setTitle("LeftList");

          ArrayList<String> list = new ArrayList<String>();
         LazyHelper lHelper = new LazyHelper(getActivity());
         list = lHelper.getLazyDetials();

           /* for (int i = 0; i < values.length; ++i) {
              list.add(values[i]);
            }
            final StableArrayAdapter adapter = new StableArrayAdapter(getActivity(),
                android.R.layout.simple_list_item_1, list);*/
            LeftListAdapter lAdapter = new LeftListAdapter(getActivity(),list);
            lv.setAdapter(lAdapter);
            lv.setOnItemClickListener(new OnItemClickListener()
            {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int pos, long arg3) {
                    final String clickedData = (String)arg0.getItemAtPosition(pos);
                    Bundle bundle = new Bundle();
                    bundle.putString("clickedItemName", clickedData);
                    Fragment detailFragment = DetailFormRightFragment.newInstance();
                    detailFragment.setArguments(bundle);
                    getActivity().getFragmentManager().beginTransaction().replace(R.id.details, detailFragment).addToBackStack(null).commit();
                }

            }
                    );
         return v;
    }


     @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        getActivity().getMenuInflater().inflate(R.menu.search, menu);
        SearchView searchView=(SearchView)menu.findItem(R.id.search);
        searchView.setIconifiedByDefault(true);
    } 

     @Override
    public boolean onOptionsItemSelected(MenuItem item) {

         super.onOptionsItemSelected(item);
         return false;
    }


     @Override
    public void onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
        /*MenuItem item;
        menu.clear();
        getActivity().getMenuInflater().inflate(R.menu.search, menu);
        SearchView searchView=(SearchView)menu.findItem(R.id.search);
        searchView.setIconifiedByDefault(true);*/
    }

     private class StableArrayAdapter extends ArrayAdapter<String> {

            HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

            public StableArrayAdapter(Context context, int textViewResourceId,
                List<String> objects) {
              super(context, textViewResourceId, objects);
              for (int i = 0; i < objects.size(); ++i) {
                mIdMap.put(objects.get(i), i);
              }
            }

            @Override
            public long getItemId(int position) {
              String item = getItem(position);
              return mIdMap.get(item);
            }

            @Override
            public boolean hasStableIds() {
              return true;
            }

          }

     private class LeftListAdapter extends BaseAdapter implements OnClickListener {
         private Context mcontext;
         ArrayList<String> listData;
         private  LayoutInflater inflater=null;
         public LeftListAdapter(Context context, ArrayList<String> listItems) {
              mcontext=context;
              listData=listItems;
              inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         }

        @Override
        public int getCount() {
            return listData.size();
        }

        @Override
        public Object getItem(int arg0) {
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View view, ViewGroup arg2) {
            // create a ViewHolder reference
            View vi=view;
            if(vi==null){
                vi = inflater.inflate(R.layout.item, null);
            }
            TextView text=(TextView)vi.findViewById(R.id.text);
            text.setText(listData.get(position));
            vi.setOnClickListener(this);
            return vi;
        }

        @Override
        public void onClick(View vi) {
            TextView text=(TextView)vi.findViewById(R.id.text);
            Bundle bundle = new Bundle();
            bundle.putString("clickedItemName", text.getText().toString());
            Fragment detailFragment = DetailFormRightFragment.newInstance();
            detailFragment.setArguments(bundle);
            getActivity().getFragmentManager().beginTransaction().replace(R.id.details, detailFragment).addToBackStack(null).commit();          
        }

     }
   }

在你的片段中onCreateView()方法,你需要调用setHasOptionsMenu(true)告诉主机 Activity 您的片段具有要添加的菜单选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OnCreateOptionsMenu() 未在 Fragment 中调用 的相关文章

随机推荐

  • 我如何更改EditText光标旋钮颜色android(不是旋钮光标颜色)

    I am trying to change my EditText cursor knob but failing to see it on a device attached is my XML for this layout
  • 不同计算机上的 Android 设备之间的通信

    是否可以使 Eclipse 上的两个 Android 模拟器从通过快速以太网链路连接的两台不同机器进行通信 感谢您的回复 是的 传出端可以正常工作 但传入端 无论哪一个正在接收连接 都有点复杂 您可以设置模拟器或 adb 端口转发 但这只会
  • 重用 Java 方法的最佳方法

    我正在学习 Java 和 OOP 并且一直在做问题欧拉计划 http projecteuler net index php section problems用于练习 顺便说一句 很棒的网站 我发现自己一遍又一遍地做许多相同的事情 例如 检查
  • 电子在没有任何信息的情况下死亡,现在怎么办?

    我正在构建的应用程序 当我编译它以使用电子构建器打包它进行分发时 时不时地会死掉 显示空白屏幕和断开连接的开发工具 有什么想法或者如何开始弄清楚这里发生了什么吗 听听uncaughtException事件并记录您收到的任何错误 这将使您深入
  • Msil 以动态类型发出静态数组

    我正在尝试使用 Reflection Emit 在 c 中 创建一个新类型 我想要创建的代码类似于 public class public static int A new int 1 2 3 我首先尝试定义一个字段 然后设置它的值 var
  • 在 CSS 中指定后备字体大小?

    有没有办法指定不同的字体sizesCSS 中的后备字体 我想做这样的事情 这显然不起作用 div font family Arial Narrow Arial Helvetica sans serif font size 20px 18px
  • BigInteger 的困难

    我正在尝试使用递归和 BigInteger 进行阶乘 但 eclipse 抱怨 BigInteger 我知道这个程序应该很简单 但它让我头疼 这是代码 import java util Scanner import java math Bi
  • 使用 spring-java-config 创建“决策步骤循环”

    我正在尝试将 spring batch 作业 在 xml 中定义 移植到基于 java config 的作业 这是我的作业配置文件的片段
  • 在哪里可以找到并提交有关 Google Chrome 浏览器的错误报告?

    对于想要为 chrome 浏览器进行开发的开发人员来说 能够审查现有的错误 以避免太多的麻烦 并添加新的错误 以改进 是很重要的 但我似乎找不到该项目的错误跟踪 它is开源 对吗 谷歌正在称呼它Chromium http code goog
  • 内存地址是否指向一个字节的信息?

    以下是 DTS 文件的摘录 linux arch powerpc boot dts 板名 dts memory device type memory reg lt 0x00000000 0x40000000 gt 1GB at 0 嵌入式设
  • Feathers 中的任意响应内容类型

    我有一项自定义服务 必须以 CSV 格式返回数据 我无法使用标准 Express 路线 因为我需要在该端点上使用 Feathers 的钩子 我找不到返回非 HTML 非 JSON 数据的 Feathers 服务的示例 并且找不到指定响应内容
  • 如何查找出现在括号之间的所有单词?

    我有一个文件 其中包含括号中的一些单词 我想编制一个出现在那里的所有独特单词的列表 例如 This is some text This text has some words in parenthesis Sometimes there a
  • 在 osx 上安装 pycrypto 时出现问题

    我正在尝试将 Django 项目安装到我的 OSX 计算机上 这需要 PyCrypto 我收到以下错误 running install running build running build py running build ext run
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS
  • 为什么要为具有重要析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

    据我了解 至少对于c 14 析构函数不能是constexpr如果它不是微不足道的 隐式生成或 default 声明的意义何在constexpr具有非平凡析构函数的结构的构造函数 struct X int a constexpr X int
  • JavaScript 中的全局函数

    我是 js 新手 试图了解全局和私有函数 我了解全局变量和局部变量 但是如果我有一个名为test html和 2 个名为test1 js and test2 js 现在我包括test1 js and test2 js in test htm
  • Android 广播接收器中的 StartActivity

    我在manifest xml中注册接收短信广播 如何在广播的 receive 方法中启动新的活动 是否有任何意图要设置的标志或其他什么 use FLAG ACTIVITY NEW TASK像这样 Override public void o
  • (cons 'a (cons 'b 'c)) 和 (cons 'a '(b.c)) 之间的 Lisp 区别

    有什么区别 cons a cons b c A B C and cons a b c A B C 我需要使用 cons 创建以下列表 a b c 所以我试图理解 是什么 代表 L E 我有以下内容 cons cons a b c 但它产生
  • Java 开发人员在 Mac OS 上遇见 Objective-C

    很多年前我就用 C 进行过开发 但现在我主要是一名 Java 软件工程师 鉴于我拥有一部 iPhone 准备下个月购买 MacBook 并且总体上对开始 Mac OS 开发 使用 Objective C 感兴趣 我想我应该提出这个问题 下一
  • OnCreateOptionsMenu() 未在 Fragment 中调用

    我有一个应用程序 它有一个活动 其中有两个水平放置的片段 在我的活动中 我使用了膨胀菜单onCreateOptionsMenu 使用它我可以显示操作栏选项菜单 但是 当我尝试从我的片段之一更新操作栏菜单项时 onCreateoptionsm