0

私が検索して解決策を探した問題に遭遇しましたが、それを見つけることができません。ActionBarSherlockアクションバーのアクションボタンで開く設定画面を設定しようとしています。ボタンはアクションバーに表示されますが、押しても何もしません。彼らは新しい意図を開始することになっていますが、そうではありません。ここにいくつかのコードがあります:

Main.java:

package com.myname.minteract;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

import android.content.Intent;
import android.os.Bundle;

public class Main extends SherlockFragmentActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.activity_main, menu);
        menu.add("Add Server")
        .setIcon(R.drawable.ic_action_add_server)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add("Refresh Servers")
        .setIcon(R.drawable.ic_action_refresh)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add("Settings")
        .setIcon(R.drawable.ic_action_options)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        return(super.onCreateOptionsMenu(menu));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.addServer:
            startActivity(new Intent(this, AddServer.class));
            return(true);
        case R.id.settings:
            startActivity(new Intent(this, Settings.class));
            return(true);
        }
        return(super.onOptionsItemSelected(item));
    }
}

私の他のクラスファイルとxmlファイルは、ここにあるものと同じですが、名前が少し変更されています(すべてのコードを投稿すると、非常に多くのスペースが必要になります)。

うまくいけば、これは十分な情報です。私はAndroidにかなり慣れておらず、ActionBarSherlockにも非常に慣れていないので、かなり簡単なものを見逃している可能性があります。logcatなどを使ってみましたが、ボタンは文字通り何もせず、logcatにもエラーで表示されません。

ありがとう!

追記:ICSを実行しているHTC Sensation4GとFroyoを実行しているMyTouch3Gを使用してアプリをテストしています(ハニカム前のデバイスと互換性があることを確認するため)。

編集:

これが私の/res/menu/activity_main.xmlです:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_settings"
        android:title="@string/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
    <item android:id="@+id/addServer"
        android:icon="@drawable/ic_action_add_server"
        android:title="Add Server" />
    <item android:id="@+id/refreshServers"
        android:icon="@drawable/ic_action_refresh"
        android:title= "Refresh Servers" />
    <item android:id="@+id/settings"
        android:icon="@drawable/ic_action_options"
        android:title="Settings" />
</menu>
4

1 に答える 1

3

menu.add(...)XMLファイルにすべてのIDを設定し、それ以外もすべて設定したので、メインコードで使用する必要はありません。単に膨らませればMenu、すべてがうまくいくでしょう。

さらに、イベントを処理したので、true代わりに戻ります。これを試して:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_main, menu);
    return(true);
}

個人的には、これらをプログラムで<item ...>はなくsとして追加することをお勧めres/menu/activity_main.xmlしますが、これがうまくいく場合は、それが重要ですよね?

于 2012-08-04T03:35:54.947 に答える