Никакие действия или значки не отображаются на панели действий; только в переполнении

Я не новичок в программировании, но совершенно новый нуб в отношении Android и Java.

Недавно я принял решение запрограммировать приложение для Android с помощью этого руководства. Я дошел до панели действий и даже могу отображать некоторые действия, такие как поиск и настройки в переполнении. Что я не могу сделать, так это позволить действию появиться на панели действий (со значком или без значка).

Мне удалось один раз с этим уроком, но я как-то не могу повторить это на моем настоящем "Tutorialapp".

Вот мой код:

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.newapp.MainActivity" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never"/>
<item
    android:id="@+id/action_search"
    android:orderInCategory="1"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"
    android:showAsAction="always"/>
</menu>

MainActivity.java:

package com.example.newapp;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

public final static String EXTRA_MESSAGE = "com.example.newapp.MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }

    switch (item.getItemId()) {

    case R.id.action_search:
        openSearch();
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

private void openSearch() {
    Toast.makeText(this, "This is a Search Button", Toast.LENGTH_SHORT).show();

}

public void sendMessage (View view){
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}
}

2 ответа

Попробуйте поменять местами пункты меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="always"/>


 <item
   android:id="@+id/action_settings"
   android:orderInCategory="101"
   android:title="@string/action_settings"
   app:showAsAction="never"/>
</menu>

Я не знаю почему, но вы должны указать в коде Java действие всегда. У меня была такая же проблема, и я решил ее так:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    menu.findItem(R.id.actionSearch).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    return true;
} 

Надеюсь, это решит вашу проблему.:D!! Удачи!

Другие вопросы по тегам