Context Menu Problem - how to resolve these menu items?
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 开发者_JS百科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">
<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>
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.
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">
<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 :)
精彩评论