如何将menu.xml中的选项卡与代码绑定?

时间:2015-05-31 17:30:34

标签: android

我是Android的新手。我偶然发现从菜单中连接标签和代码。

这是我的menu.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
            <item
                android:id="@+id/multiTouchExample"
                android:title="MultiTouch"
                android:icon="@drawable/ic_multitouch_grey"
                android:showAsAction="ifRoom">
            </item>
</menu>

这是我的MyActivity.java:

//includes

public class MyActivity extends Activity {

final String LOG_TAG = "TAGLogs";
ActionBar actionBar;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        

    actionBar = this.getActionBar();

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Log.d(LOG_TAG, "OnCreate start");
    Log.d(LOG_TAG, new Integer(actionBar.getTabCount()).toString());
}
}

我在logcat中有这个:

>     D/TAGLogs﹕ OnCreate start
>     D/TAGLogs﹕ 0

所以它告诉我,我有0个标签,但我在menu.xml中有1个并在运行程序时看到它。它在哪里?我需要做什么?

这是工作的屏幕截图:screenshot of working

更新: 当我想链接res / layout / main.xml中的按钮和代码:

button = (Button) findViewById(R.id.button);

所以我没有在代码中创建带new operator的按钮。 有没有办法像按钮一样解决这个问题?

2 个答案:

答案 0 :(得分:2)

所以,我在StackOverflow上找到了解决方案,但在另一个环境中。

以下是这个答案:

Android - How to dynamically change menu item text outside of onOptionsItemsSelected or onCreateOptionsMenu

首先,您应该保存对菜单的引用:

publid boolean onCreateOptionsMenu(MenuItem menu){
    getMenuInflater().inflate(R.menu.menu, menu);
    this.menu = menu;// this.menu is just field Menu menu in MyActivity class
    return true;
}

通过此引用,您可以完全访问menuItems。

例如:

MenuItem item = menu.findItem(R.id.multiTouchExample);
    item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            item.setIcon(R.drawable.ic_multitouch_red);
            MultiTouchExample();
            return true;
        }
    });

After pressing

答案 1 :(得分:1)

这可能会对您有所帮助:

http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Notice that setContentView() is not used, because we use the root
    // android.R.id.content as the container for each fragment

    // setup action bar for tabs
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);

    Tab tab = actionBar.newTab()
                   .setText(R.string.artist)
                   .setTabListener(new TabListener<ArtistFragment>(
                           this, "artist", ArtistFragment.class));
    actionBar.addTab(tab);

    tab = actionBar.newTab()
               .setText(R.string.album)
               .setTabListener(new TabListener<AlbumFragment>(
                       this, "album", AlbumFragment.class));
    actionBar.addTab(tab);
}