views:

47

answers:

2

Hi, I am very new to Android.

I am trying to build inflate a context menu within the sample GridView provided on the Android dev site. Eclipse tells me that the referenced items cannot be resolved, if someone could help find where I coded s.th. wrong, that would be great because I am stuck at the moment. Thanks.

I posted my entire code below. I get the error message at: if (item.getItemId() == R.id.menu_facebook) and the other R.id.'s


This is the ShareGalleryView.java file:

 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

        };
    }
}

and this is the menu_gallery_share.xml file:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;   
  <menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    <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>
+1  A: 

Your menu xml file is defined incorrectly. A <menu> can only have <item>s and <group>s. Remove the extra <menu> you have defined and it should work properly. Your project probably stopped building as well and you can check that in Eclipse's Android console. See this documentation for more information about the menu resource.

Qberticus
I already found that, but unfortunately that didn't solve the problem :((
kivy
I just solved this problem I had to change the titles android:title="@string/Facebook" into android:title="Facebook", but it's still not running
kivy
The error I get now is stated as an unparsed aapt error...
kivy
A: 

PROBLEMS SOLVED!!

Wohooo, it works :) The first problem was within the xml file, here is the corrected code now:

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    <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>

And for my second problem - the unparsed aapt error - I simply had to delete the error and clean the project :)

Thank you for the replies :)

kivy