Пункты меню не будут отображаться на панели действий
ОБНОВЛЕНИЕ: работает на вкладке, но на телефоне по какой-то причине наложено
У меня есть вопрос, касающийся пунктов меню, которые Android использует для ActionBar, у меня есть собственный фон для моего actiobar (рисунок), и я установил его в коде здесь. Этот кусок кода работает нормально. Но когда я пытаюсь добавить пункт меню, это не удается.
То, что я хочу, довольно просто, мне нужна кнопка с надписью "сохранить продукт как избранный" внизу экрана, например, нижняя панель действий. Но когда я пытаюсь добавить кнопку в качестве пункта меню, она не отображается, ничего не меняется.
В журнале говорится, что метод onCreateOptionsMenu() фактически выполнен. Есть идеи?
Это действие, для которого я хочу меню:
package com.x;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;
import com.x.R;
import com.x.products.fragments.*;
import com.x.tasks.ZoekQueryTask;
import com.x.util.Helper;
import com.x.util.UnscaledBitmapLoader;
public class ProductActivity extends Activity {
private Bundle save;
/** Called when the activity is first created. */
@SuppressWarnings("rawtypes")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.product);
@SuppressWarnings("deprecation")
LocalActivityManager manager = new LocalActivityManager(this, false);
Helper helper = new Helper();
save = null;
String id = (String) getIntent().getExtras().get("id");
String score = (String) getIntent().getExtras().get("score");
String profileId = (String) getIntent().getExtras().get("profileId");
// String id = "138946";
// String profileId = "28";
// String score = "100%";
String query = "SELECT * FROM products WHERE id = "+id;
ArrayList<HashMap> result = null;
try {
ZoekQueryTask zoekQueryTask = new ZoekQueryTask(query);
result = zoekQueryTask.getResults();
}
catch(Exception e) {
Log.e("Afgevangen error", e.getMessage());
}
TabHost tb = (TabHost) findViewById(R.id.tabs);
manager.dispatchCreate(savedInstanceState);
tb.setup(manager);
Intent info = new Intent();
info.setClass(this, InfoFragment.class);
info.putExtra("result", result);
info.putExtra("profileId", profileId);
TabSpec tsInfo = tb.newTabSpec("info");
tsInfo.setContent(info);
tsInfo.setIndicator("info");
Intent specs = new Intent();
specs.setClass(this, SpecsFragment.class);
specs.putExtra("result", result);
TabSpec tsSpecs = tb.newTabSpec("specs");
tsSpecs.setContent(specs);
tsSpecs.setIndicator("specs");
Intent prijs = new Intent();
prijs.setClass(this, PrijsFragment.class);
prijs.putExtra("result", result);
TabSpec tsPrijs = tb.newTabSpec("Prijs");
tsPrijs.setContent(prijs);
tsPrijs.setIndicator("Prijs");
TabSpec tsFotos = tb.newTabSpec("Fotos");
tsFotos.setContent(info);
tsFotos.setIndicator("Fotos");
tb.addTab(tsInfo);
tb.addTab(tsSpecs);
tb.addTab(tsPrijs);
tb.addTab(tsFotos);
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
Bitmap bm = UnscaledBitmapLoader.loadFromResource(getResources(), R.drawable.logo, null);
BitmapDrawable background = new BitmapDrawable(this.getResources(), bm);
background.setTileModeX(android.graphics.Shader.TileMode.CLAMP);
actionBar.setBackgroundDrawable(background);
TextView nameText = (TextView) findViewById(R.id.name);
TextView scoreText = (TextView) findViewById(R.id.score);
nameText.setText(result.get(0).get("name").toString());
scoreText.setText(score);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
Log.i("hallo", "hoi");
inflater.inflate(R.layout.product_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.save:
Log.i("menu", "werkt");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Это меню XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/save"
android:title="Opslaan in favorieten" >
</item>
</menu>
2 ответа
Я думаю, вам нужно это исправить:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
Log.i("hallo", "hoi");
inflater.inflate(R.layout.product_menu, menu); // <- this is wrong
return true;
}
Вместо R.layout.product_menu
, это должно относиться к R.menu.your_desired_menu
Если вы хотите показать свой пункт меню на панели действий, установите android:showAsAction
свойство вашего товара в product_menu.xml;
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:title="Save"
android:showAsAction="always" />
</menu>
Вы можете установить это свойство:
- ifRoom
- никогда
- withText
- всегда
- collapseActionView
Я надеюсь, это поможет вам!
Штеффен