我应该为每个屏幕创建一个活动吗?

时间:2012-04-25 17:50:39

标签: android android-layout android-preferences android-2.3-gingerbread

我将从一个例子开始...如果你去设置>应用程序>管理应用程序,将打开一个新屏幕,其中包含已安装应用程序的列表:如果您单击列表中的任何应用程序,它将打开一个包含有关应用程序信息的新屏幕。

好吧,我的应用程序的某些设置必须通过列表进行管理,此列表的行为应与上面的示例相同。我已经创建了一个带有一些类别的PreferenceActivity,每个类别都有一些项目:当我点击其中一个项目时,我希望它打开一个新数据放在列表中的新屏幕,像上面例子的应用程序列表。此外,当我点击此列表的任何条目时,它将打开一个新屏幕以设置一些数据。

我该怎么办?我应该为每个屏幕创建一个活动吗?

5 个答案:

答案 0 :(得分:4)

Android是以这种方式创建的,根据文档“活动是一个用户可以做的单一,专注的事情。”,所以是的,你应该为每个屏幕都有一个活动。 随着Fragments的推出,这与Honeycomb略有不同,但如果您不是为平板电脑开发,那么您应该在Android上保留一页,一个活动思维。

答案 1 :(得分:3)

通常你有另一个活动调用,调用者被推入堆栈(除非调用活动要求删除)并进入休眠状态直到它返回

基本上你在Activity A中创建一个Intent来启动Activity B,你可以使用startActivityForResult和intents中的extras来传递数据示例:How to pass data between activities

当您按下后退按钮时,之前的活动再次变为活动状态,您设置的结果处理程序可以获得任何返回数据。

如果您希望提供外观和行为更好的平板电脑支持,您还可以查看支持API中的片段。

答案 2 :(得分:2)

这可能是最好的方法,至少如果你没有进行向导式活动。

使用ListActivity显示您的列表,并使用intents向此活动传入数据。

答案 3 :(得分:2)

我能够在工作中实现这一点,我现在不记得我是如何实现它的,很久以前。如果没有人给你一个很好的答案,我会在明天发布,但是:我记得放置一个Preference,它将作为一个按钮,然后我添加了一个preferenceClickListener,以便在点击时打开一个新的PreferenceScreen。 但就像我说的那样,如果你没有得到满意的答复,我明天会发给你。

祝你好运!

更新:

?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
    android:title="Personal"
    android:key="personal_category">
    <Preference
        android:key="birth"
        android:title="Birth"
        android:summary="Choose your birthday"/> 
    <PreferenceScreen 
        android:key="height_imp"
        android:title="Height"
        android:summary="Enter your height">
        <EditTextPreference
            android:key="foot"
            android:title="Foot" 
            android:summary="foot"
            android:numeric="integer"
            android:dialogTitle="Foot"/>
        <EditTextPreference
            android:key="inch"
            android:title="Inch" 
            android:summary="inch"
            android:numeric="integer"
            android:dialogTitle="Inch"/>
    </PreferenceScreen>
    <EditTextPreference
        android:key="weight"
        android:title="Weight" 
        android:summary="Enter your weight"
        android:numeric="integer"
        android:dialogTitle="Weight"/>    
</PreferenceCategory>
</PreferenceScreen>

就是这样!当您单击它时,它将带您进入第二个PreferenceScreen等等,最后当您需要自定义布局时,您需要打开一个Activity。 然后,您可以使用Preference并添加onPreferenceClick:

@Override
public boolean onPreferenceClick(Preference preference) {
    if(preference == birth){
        startActivity(new Intent(getBaseContext(), Birth.class));
    }
    if(preference == height_imp){
        PreferenceScreen a = (PreferenceScreen) preference;
        a.getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
        return false;
    }
    return true;
}

如果您需要使用preferenceScreen更改背景或其他内容,请同时添加preferenceClickListener:height_imp = (PreferenceScreen)getPreferenceScreen().findPreference("height_imp"); height_imp.setOnPreferenceClickListener(this);

答案 4 :(得分:1)

请参阅...如果用户想要从某个点返回到上一个位置...如果您为每个位置创建了单独的活动...当前活动将从堆栈弹出...让要显示的上一个活动...如果您要更改每个新屏幕的列表内容...而不是创建新活动...那么用户将难以回来...您应该再次并再次更改适配器的内容.. 所以我认为..为每个屏幕创建单独的活动更好..(并且你可以使用相同的[任何自定义布局,如果你有]布局文件用于所有活动..)