0

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

  1. 这是一个合适的android设计模式吗?在 iOS 中,我将为每个“选项卡”设置单独的视图控制器,但在 Android 中,您似乎应该有 1 个带有许多片段的活动。

  2. 是否有用于创建带有片段的简单菜单的示例代码,这就是我想要做的。

(我发现 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);

        }
    }

}
4

1 回答 1

0

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

这有点奇怪,因为它无缘无故地导致了相当重量级的活动。

片段通常用于您希望根据屏幕尺寸拥有不同内容组合的地方(例如,在平板电脑上同时在屏幕上显示列表和详细信息,但在手机上一次显示一个)。片段有时也用于特殊 UI 中,用于批量替换内容,例如选项卡或ViewPager.

对于要更改全屏内容的地方,更传统的方法是使用单独的活动。

在 iOS 中,我将为每个“选项卡”设置单独的视图控制器

iOS 对“选项卡”的定义可能与 Android 对“选项卡”的定义不同,因为您没有在此处实现选项卡。

但似乎在 Android 中,您应该有 1 个包含许多片段的活动

如果您正在实施选项卡,那将是一种合适的方法。您没有实现选项卡。

是否有用于创建带有片段的简单菜单的示例代码,这就是我想要做的。

可能不会,因为这不是您通常会做的事情。话虽如此,如果您愿意,欢迎您访问您commit()replace() FragmentTransction各个case区块onOptionsItemSelected()。就像是:

getSupportFragmentManager().beginTransaction()
                             .replace(android.R.id.content,
                                  new OtherFragment()).commit();

这假定此活动的原始 UI 也是使用片段和 a 创建的FragmentTransaction,您的代码没有显示。

我发现 android 文档不符合 iOS

你当然欢迎你的意见,不相关和有害的,因为表达它对你在这里获得帮助是不利的。

于 2013-01-17T19:15:42.837 回答