我遇到了一个问题,我搜索并搜索了一个解决方案,但找不到解决方案。我正在尝试设置一个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>
答案 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}},但如果这对您有用,那么重要的是,对吗?