android - 将 xml 用于第二个 Activity 的问题(R.id 问题)

标签 android android-layout

大家好,我是 Android 编程的新手,遇到问题需要帮助。

所以我将使用官方 android 网站用于训练的第一个应用程序 (http://developer.android.com/training/basics/firstapp/starting-activity.html)

我对创建第二个 Activity 部分感到困惑。因此,在他们通过 Intent 后,他们使用 java 代码(而不是 XML)创建了一个新的 TextView,因此我尝试使用 xml 创建该 TextView。我在 xml 中为第二个 Activity 创建了一个新的 TextView,我给它一个像这样的 id:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DisplayMessageActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        android:id="@+id/new_Text"/>

</LinearLayout>

这是第二个 Activity 的 java 代码:

package com.example.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v4.app.NavUtils;

    public class DisplayMessageActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get the message from the intent
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        // Create the text view
        TextView textView = (TextView) findViewById(R.id.new_Text);
        textView.setTextSize(40);
        textView.setText(message);

        // Set the text view as the activity layout
        setContentView(textView);

        // Show the Up button in the action bar.
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

在我更改之前,所有代码都运行良好。我变了

TextView textView = new TextView(this);

到:

TextView textView = (TextView) findViewById(R.id.new_Text);

但出于某种原因,它无法找到 new_Text 并且 Eclipse 仅建议来 self 的 main.xml 的 id。为什么会这样?是因为 R.id.blabla 只从 main.xml 获取 id 吗?如果它们不是来自 main.xml,我是否被迫使用 java 代码进行布局?

最佳答案

这篇文章中有很多困惑,但对于初学者来说:

您希望最终对用户可见的每个 Activity 都有自己的 XML 布局。如果您开始一个新的 Android 项目,它会默认为您提供位于 res>layout 文件夹中的 1 个 XML 布局和 1 个 Activity ,默认情况下将作为您的用户面向视觉 Activity 。

为了您的目的,一些简单的方法可以确定一个 Activity 是否是一个“视觉” Activity ,包括:

*它扩展了 activity 或其他一些 android 父类(super class) *它有一个“onCreate 方法(通常位于类的顶部) *在 onCreate 方法中有一行代码称为 setContentView,看起来像这样。

setContentView(R.layout.httpex);

setContentView 方法很重要,因为它有点像 Activity 和 xml 布局之间的粘合剂。在 R.layout.___ 之后是您要使用的 XML 布局的名称。

只有在您将内容 View 设置为适当的 View 后,您才能使用您创建的 ID 将您的 xml 布局中的元素或“ View ”链接到您的 Activity 。像这样

TextView textView = (TextView) findViewById(R.id.new_Text);

如果将内容 View 设置为 httpex.xml ,则只能链接到 httpex.xml 等内部的 View ...

我为 newbs bc 准备了一个 spft 点,因为这群人的无知对新鲜血液来说是多么糟糕,他们忘记了开始时的艰辛,并开始觉得所有这些都是常识和显而易见的,但如果我是你我会先去 thenewboston[dot]com 观看整个系列,然后再在这里发布许多类似的问题,这样你就不会被激怒了。

关于android - 将 xml 用于第二个 Activity 的问题(R.id 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030559/

相关文章:

android - 在 android 中拉取 ListView 时刷新适配器

android - 如何使样式较大的 ProgressBar 宽度变薄 android?

android - 有多少 ViewGroup(LinearLayout、Relative、Grid 等)被认为太多了?

android - 如何获取当前显示的 fragment ?

java - 如何通过 Intent 传递对象列表

java - 如何从 DateFormat 中删除 SECONDS 字段

android - 在 Android 上动态添加 TextView 到 ScrollView

带有背景颜色的 Android 按钮图标

java - 当我在 CardStackView 的最后一项时?

android - RecyclerView 适配器显示的图像多于应有的数量