4

我将从一个示例开始...如果您转到Settings > Applications > Manage applications,将打开一个新屏幕,其中包含已安装应用程序的列表:如果您单击列表中的任何应用程序,它将打开一个新屏幕,其中包含有关应用程序的信息。

嗯,我的应用程序的一些设置必须通过一个列表来管理,这个列表应该和上面的例子一样。我已经创建了PreferenceActivity一些类别,每个类别都有一些项目:当我单击其中一个项目时,我希望它打开一个新屏幕,将新数据放在列表中,就像上述例子的应用。此外,当我单击此列表的任何条目时,它将打开一个新屏幕以设置一些数据。

我应该如何进行?我应该为每个屏幕创建一个活动吗?

4

5 回答 5

4

根据文档“活动是用户可以做的一个单一的、专注的事情”,Android 就是这样创建的,所以是的,每个屏幕都应该有一个活动。随着 Fragments 的引入,Honeycomb 对此有所改变,但如果您不是为平板电脑开发,您应该在 Android 上保持一页一活的心态。

于 2012-04-25T18:03:10.707 回答
3

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

基本上,您在 Activity A 中创建一个 Intent 来启动 Activity B,您可以使用 startActivityForResult 和 Intent 中的附加功能来传递数据示例:如何在活动之间传递数据

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

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

于 2012-04-25T18:03:22.203 回答
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);

于 2012-04-25T18:02:44.857 回答
2

这可能是最好的方法,至少如果您不从事向导风格的活动。

使用ListActivity显示您的列表,并使用 intents 将数据传入和传出此活动

于 2012-04-25T17:59:58.453 回答
1

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

于 2012-04-25T17:57:48.633 回答