Android菜单(ActionBar?)点击更改片段

时间:2013-01-17 18:57:05

标签: android

我正在尝试为我的活动设置片段,以便在选择菜单项时在它们之间进行更改。

  1. 这是一个合适的Android设计模式吗?在iOS中,我会为每个“Tab”设置单独的视图控制器,但在Android中,您似乎有1个包含许多片段的活动。

  2. 是否有用于创建带有片段的简单菜单的示例代码,就像我正在尝试做的那样。

  3. (我发现Android文档不符合iOS)

    main_menu.xml

    <item
        android:id="@+id/need_to_know_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/need_to_know"
        />
    <item
        android:id="@+id/schedule_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/schedule"
        />
        <item
        android:id="@+id/news_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/news"
        />
        <item
        android:id="@+id/map_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/map"
        />
            <item
        android:id="@+id/tweets_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/tweets"
        />
            <item
        android:id="@+id/players_menu_item"
        android:showAsAction="ifRoom|withText"
        android:title="@string/players"
        />
    

    MainActivity.java

    package com.example.app;
    
    import android.os.Bundle;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.content.Intent;
    import android.view.Menu;
    import android.view.MenuItem;
    
    public class MainActivity extends Activity {
    
        @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, menu);
            getActionBar().setHomeButtonEnabled(true);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
            switch(item.getItemId())
            {
                case android.R.id.home:
                case R.id.need_to_know_menu_item:
                    Intent intent = new Intent(this, MainActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    return true;
    
                case R.id.schedule_menu_item:
                    return true;
    
                case R.id.news_menu_item:
                    return true;
    
                case R.id.map_menu_item:
                    return true;
    
                case R.id.tweets_menu_item:
                    return true;
    
                case R.id.players_menu_item:
                    return true;
    
                default:
                    return super.onOptionsItemSelected(item);
    
            }
        }
    
    }
    

1 个答案:

答案 0 :(得分:0)

  

这是一个合适的Android设计模式吗?

这有点奇怪,因为没有明显的原因导致相当重量级的活动。

片段通常用于您希望根据屏幕尺寸具有不同内容混合的位置(例如,平板电脑上同时显示屏幕上的列表和详细信息,但在手机上一次可见一个)。片段有时也会在专业用户界面中用于批量替换内容,例如标签或ViewPager

对于您想要更改全屏内容的地方,更常规的方法是进行单独的活动。

  

在iOS中,每个“Tab”都有单独的视图控制器

iOS对“标签”的定义可能与Android对“标签”的定义不同,因为您没有在此处实施标签。

  

但是在Android中你似乎有1个带有许多片段的活动

如果您正在实施标签,那将是一种合适的方法。您没有实施标签。

  

是否有用于创建带有片段的简单菜单的示例代码,就像我正在尝试的那样。

可能不是,因为这不是你通常会做的事情。话虽如此,如果您愿意,欢迎commit() replace() FragmentTransction case onOptionsItemSelected()getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, new OtherFragment()).commit(); 块中的FragmentTransaction {{1}}。类似的东西:

{{1}}

这假设此活动的原始用户界面也是使用您的代码未显示的片段和{{1}}创建的。

  

我发现Android文档不符合iOS

当然,欢迎您提出您的意见,无关紧要且不利于表达您在此获得帮助。