ActionBarSherlock动作按钮按下时不做任何事情

时间:2012-08-04 03:11:35

标签: android preferences actionbarsherlock

我遇到了一个问题,我搜索并搜索了一个解决方案,但找不到解决方案。我正在尝试设置一个Preference屏幕,该屏幕由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文件与找到here的文件相同,但名称更改次数较少(发布我的所有代码会占用大量空间)。

希望这是足够的信息。我是Android的新手,也是ActionBarSherlock的新手,所以我可能会错过一些相当容易的东西。我已经尝试过使用logcat等,但按钮字面上什么也没做,它甚至没有出现在logcat上,但是出现了错误。

谢谢!

额外注意:我正在使用运行ICS的HTC Sensation 4G和运行Froyo的MyTouch 3G测试我的应用程序(以确保它与预蜂窝设备兼容)。

修改

这是我的/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>

1 个答案:

答案 0 :(得分:3)

您已在XML文件中设置了所有内容的ID,并在其中设置了其他所有内容,因此无需在主代码中使用menu.add(...)。只需给Menu充气,一切都会好起来。

此外,由于您已处理该事件,请返回true。试试这个:

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

就我个人而言,我建议在<item ...>中添加res/menu/activity_main.xml而不是以编程方式添加{{1}},但如果这对您有用,那么重要的是,对吗?