1

嘿伙计们,我对 Android 编程有点陌生,我有一个问题需要帮助。

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

我对创建第二个活动部分感到困惑。因此,在他们通过意图后,他们使用 java 代码(而不是 XML)创建了一个新的 TextView,所以我尝试使用 xml 创建该 TextView。我在 xml 中为第二个活动创建了一个新的 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>

这是第二个活动的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 只建议来自我的 main.xml 的 id。为什么会这样?是因为 R.id.blabla 只从 main.xml 获取 id 吗?那么,如果它们不是来自 main.xml,我是否被迫使用 java 代码进行布局?

4

3 回答 3

1

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

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

出于您的目的,一些简单的方法可以确定一个活动是否是一个“视觉”活动,包括:

*它扩展了活动或其他一些 android 超类 *它有一个“onCreate 方法(通常位于类的顶部)*在该 onCreate 方法内有一行名为 setContentView 的代码,看起来像这样。

设置内容视图(R.layout.httpex);

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

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

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

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

我为newbs bc ik 有一个spft 点,这群人因为他们的无知而对新鲜血液来说是多么愚蠢,他们忘记了开始有多么困难,并开始觉得所有这些东西都是常识和显而易见的,但如果我是你,我会前往 thenewboston[dot]com 并观看整个系列,然后在这里发布许多类似的问题,以免被激怒。

于 2012-12-25T12:43:03.637 回答
0

只有在将视图设置为活动的特定 XML 后,才能调用小部件。例如,如果您有一个活动调用 Main,您将使用一个 XML 作为该特定活动的 UI,因此您可以调用在该特定 XML 中创建的小部件。由于您没有发布代码,我只能猜测您正在尝试使用 TextView 生成第二个 XML,然后调用它。在活动开始时,当您设置 XML 布局时,您可以从中调用小部件,除非您膨胀视图以调用第二个 XML,我认为这不是您的情况。

我希望我正确理解了你的问题。

于 2012-12-25T12:32:18.467 回答
0

在findViewById()方法之前添加setContentView( )方法。

于 2012-12-25T12:44:36.007 回答