【问题标题】:Android how to load a new layoutAndroid如何加载新布局
【发布时间】:2011-02-22 18:00:28
【问题描述】:

当我点击一个按钮时,我试图加载一个新的layout,这个布局中只有一个webView,所以我的目标是,当点击按钮时,它会打开 webView 并引导用户预先确定的页面。现在我有

Button codesBtn = (Button)findViewById(R.id.imagebutton1);
    codesBtn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            setContentView(R.layout.codes);
        }
    });

这是在我的主要活动中的onCreate() 方法中。我有几个担忧:

1) 这是放置这段代码的正确位置吗?
2) 我是否需要为 webView 创建单独的活动以及我希望按钮做什么?
3) 如果有,需要的活动的基本结构是什么?

提前致谢!

【问题讨论】:

  • 你试过了吗?它看起来一般还可以;不,您通常不需要单独的活动。如果您偶然发现了一些具体问题,请提出具体问题。
  • @SevaAlekseyev 我在这段代码中遇到的错误是它不能将“代码”识别为布局。我是否必须对清单文件做一些事情才能像上面那样使用“代码”?
  • 编辑codes.xml,将布局设为顶层对象。 FrameLayout 或 LinearLayout 可以。让你的 WebView 成为它的孩子。在 Android 中,布局 XML 文件的顶级对象应该是 - 呃 - 布局,而不是数据视图。

标签: java android button android-activity oncreate


【解决方案1】:

一般来说,与更改当前活动的布局相比,使用新布局启动新活动更容易。

如果您想将用户引导至网站,您可以使用意图来要求浏览器打开(示例取自 this question

String url = "http://almondmendoza.com/android-applications/";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

或者,您可以创建一个只有 WebView 的 Activity 并通过说来启动它;

Intent i = new Intent(this, MyWebViewActivity.class);
i.putExtra("destination", myDestination);
startActivity(i);

【讨论】:

  • -1 活动很昂贵。如果您只想更改视图,将 FrameLayout 作为顶级视图并在其中翻转框架要容易得多。
  • @Seva Alekseyev 认真的吗?请备份您的声明。如果您真的认为这是一个更好的解决方案,您应该提供详细信息的答案。然而,Android 的标准最佳实践是为每个独特的视觉界面使用不同的 Activity。来自文档“活动为用户可以进行的一项重点工作提供了一个视觉用户界面。”使用不同的活动可以为您提供许多不错的默认行为,例如正确的返回行为和熟悉的屏幕转换,这将使您的应用易于用户学习。
  • 如果您交换视图,您需要自己实现所有这些,这当然是可能的,但在简单的情况下过于矫枉过正。通常,只有在您以简单的方式完成事情并发现您有实际的性能问题时才优化性能。在新的 Activity 中加载 WebView 在任何 Android 手机上都不会成为问题。
  • Activity 会带来以下开销:状态管理、重要的生命周期、意图处理、上下文管理(资源等)、对话框堆栈......对于简单的视图任务来说,这些都不需要翻转。
  • @Seva Alekseyev,是的,有开销。我没说没有。但是开销值得获得的简单性吗?在这种情况下,我肯定会说,是的。其中一些“开销”实际上对于在视图之间切换非常有用,这就是活动首先存在的原因。如果您正在编写游戏或对速度有严格要求的东西,您可能需要考虑优化,但对于这种简单的情况则不是这样。使用 Activity 会增加多少毫秒?与加载网页的时间相比?
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多