【问题标题】:load activity with a different state than the default one加载具有不同于默认状态的活动
【发布时间】:2013-01-25 14:36:08
【问题描述】:

我的应用程序中有两个活动。 Activity1 有一个列表视图和两个按钮(比如 button1 和 button2)。根据用户单击哪个按钮,列表视图中的内容会相应更改。活动的默认加载是让 button1 单击活动 1 中加载的内容。 在我的 Activity2 中,我有一个按钮(比如 button3),当点击它时,它必须加载 Activity1,但列表视图加载了 button2 点击结果,而不是显示 button1 点击结果的默认显示。 关于如何实现这一点的任何帮助?在 activity2 中 button3 的 onclick 事件中,我可以加载 activity1,但会加载显示 button1 点击结果的默认状态。

【问题讨论】:

  • 感谢您的回复。看起来通过使用 Intent 传递数据/标志来处理它将是最好的方法。 ——

标签: android


【解决方案1】:

在活动之间切换时,通过使用 IntentHandler 传递一个额外的字符串来保存 ListView 的状态:

Intent intent = new Intent(getBaseContext(), yourActivity.class);
intent.putExtra("LISTVIEW_STATE", myListViewState);
startActivity(intent);

然后在您接收活动的 onCreate() 方法(在本例中为 yourActivity)中,您可以通过以下方式获取状态:

Intent intent = getIntent();
String recievedListViewState = intent.getStringExtra("LISTVIEW_STATE");

【讨论】:

  • 感谢您的回复。看起来通过使用 Intent 传递数据/标志来处理它是最好的方法。
【解决方案2】:

从第二个活动发送带有标志的 Intent。 在第一个活动中,请始终注意此标志并相应地触发您的第二个按钮代码。作为参考,您可以在此处或谷歌搜索“在活动之间传递数据”。

【讨论】:

  • 感谢您的回复。看起来通过使用 Intent 传递数据/标志来处理它是最好的方法。
  • 有关详细说明,请参阅 MattDavis 的回答。它确实想要你想要的。很高兴我能帮上忙。
【解决方案3】:

您可以通过在 Intent 上添加 Extras 来做到这一点。现在,当您从 Activity2 启动 Activity1 时,您的代码可能如下所示:

Intent intent = new Intent(Activity2.this, Activity1.class);
startActivity(intent);

您可以在 Intent 上使用 putExtra() 方法,在此 Intent 上设置一个键值对(称为额外),使其看起来像这样。

Intent intent = new Intent(Activity2.this, Activity1.class);
intent.putExtra("LIST_TO_DISPLAY", "LIST_2");    
startActivity(intent);

putExtra() 的第一个参数(键)总是一个字符串,第二个参数(值)可以是许多不同的数据类型。这也是一个字符串。

一旦 Activity1 启动,您可以使用 getIntent() 获取 Intent,然后从中提取额外内容,全部在 onCreate() 中。

protected void onCreate(Bundle b)
{
    Intent intent = getIntent();
    String whichList = intent.getStringExtra("LIST_TO_DISPLAY"); //which List now equals "LIST_2"

    if( whichList != null && "LIST_2".equals(whichList) )
    {
        //Set up List 2
    }
    else
    {
        //Set up the default list
    }
}

Here's the docs for the Intent Class。您可以找到对所有 put 和 get Extra 方法的说明,以及一些其他信息,这些信息在您想要自定义启动活动的行为方式时可能会有所帮助。

【讨论】:

  • 感谢您的回复。看起来通过使用 Intent 传递数据/标志来处理它将是最好的方法。 ——
【解决方案4】:

我不明白,所以你会想到几件事。

...

Activity1 -> Button1 -> 列表视图(内容 A)

Activity1 -> Button2 -> ListView(内容 B)

Activity1 -> Activity2 -> Button3 -> Activity1 -> ListView(内容 B)

所以你可以

在活动1中

启动startActivity(intentActivity2);

在活动2中

intentResult.putExtra("cmd", "button3"); onbutton 点击​​ setResult(RESULT_OK,intentresult) 并完成

返回 Activity1

onActivityResult resultIntent.getExtra("cmd")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多