上下文菜单问题 - 如何解决这些菜单项?

3
我很新于Android技术。
我正在尝试在Android dev网站提供的示例GridView中构建一个膨胀上下文菜单。Eclipse告诉我引用的项目无法解析,如果有人能帮助找到我编码错误的地方,那就太好了,因为我现在卡住了。谢谢。
我在下面发布了我的整个代码。我在这里得到了错误消息:if (item.getItemId() == R.id.menu_facebook)和其他R.id.'s。
这是ShareGalleryView.java文件:
 import android.app.Activity; 
 import android.content.Context; 
 import android.os.Bundle; 
 import android.view.ContextMenu; 
 import android.view.MenuInflater; 
 import android.view.MenuItem; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.view.ContextMenu.ContextMenuInfo;
 import android.widget.BaseAdapter;
 import android.widget.GridView;
 import android.widget.ImageView;
 import android.widget.AdapterView.AdapterContextMenuInfo;

 public class ShareGalleryView extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videogrid);

        GridView vGrid=(GridView) findViewById(R.id.vgrid);
        registerForContextMenu(vGrid);
        vGrid.setAdapter(new VideoAdapter(this));
    }

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.menu_gallery_share, menu);
    }

    public boolean onContextItemSelected (MenuItem item){
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        if (item.getItemId() == R.id.menu_facebook)
        {
         //TODO open fb
            return true;

        }
        else if (item.getItemId() == R.id.menu_youtube)
        {
            //TODO open youtube
            return true;

        }
        else if (item.getItemId() == R.id.menu_email)
        {
         //TODO open email
            return true;

        }
        else if (item.getItemId() == R.id.menu_bluetooth)
        {
            // TODO send via bluetooth
            return true;

        }
    }

    public class VideoAdapter extends BaseAdapter {
        private Context mContext;

        public VideoAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mThumbIds.length;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }

            imageView.setImageResource(mThumbIds[position]);
            return imageView;
        }

        // references to our images
        private Integer[] mThumbIds = {
                R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_2,
                R.drawable.sample_6, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_1

        };
    }
}

以下是menu_gallery_share.xml文件内容:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">   
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_facebook"
          android:title="@string/Facebook" />
    <item android:id="@+id/menu_youtube"
          android:title="@string/YouTube" />
    <item android:id="@+id/menu_email"
          android:title="@string/Email" />
    <item android:id="@+id/menu_bluetooth"
          android:title="@string/Via Bluetooth" />
   </menu>
</menu>

你发布的代码看起来没问题...你能给我展示一下文件开头使用的导入吗? - Cristian
好的,稍等一下,我会发布它们。 - kivy
完成了!已将它们添加到代码的其他部分中 ;) - kivy
2个回答

2

您的菜单XML文件定义不正确。 <menu> 只能拥有 <item><group> 。删除多余的定义的 <menu> 后它应该能正常工作。您的项目可能也停止了构建,您可以在Eclipse的Android控制台中检查。有关菜单资源的更多信息,请参见此文档。


我已经找到了,但不幸的是那没有解决问题 :(( - kivy
我刚刚解决了这个问题,我不得不将 android:title="@string/Facebook" 的标题更改为 android:title="Facebook",但它仍然无法运行。 - kivy

0

问题已解决!

哇喔,它终于可以工作了 :) 第一个问题在xml文件中,这是现在已经更正的代码:

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_facebook"
          android:title="Facebook" />
    <item android:id="@+id/menu_youtube"
          android:title="/YouTube" />
    <item android:id="@+id/menu_email"
          android:title="Email" />
    <item android:id="@+id/menu_bluetooth"
          android:title="Via Bluetooth" />
   </menu>

关于我的第二个问题——未解析的aapt错误——我只需要删除错误并清理项目:)

谢谢回复 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接