将xml用于第二个活动的问题(R.id问题)

时间:2012-12-25 12:14:03

标签: android android-layout

嘿伙计们,所以我对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代码进行布局?

3 个答案:

答案 0 :(得分:1)

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

您打算最终可以访问用户的每个Activity都会获得自己的XML布局。如果您启动一个新的Android项目,默认情况下会为您提供位于res&gt;布局文件夹中的1个XML布局和1个默认情况下将作为您的用户面向可视活动的活动。

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

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

  

的setContentView(R.layout.httpex);

setContentView方法很重要,就像你的活动和你的xml布局之间的粘合剂一样。在R.layout之后。 _ __ 会出现您要使用的XML布局的名称。

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

  

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

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

对于新手而言,我有一个新闻点,因为他们的无知会让这群人变成新鲜血液,他们会忘记它开始时有多难,并开始觉得所有这些东西都是常识而且很明显,但如果我是你我会前往thenewboston [dot] com并观看整个系列,然后在这里发布许多这样的问题,这样你就不会受到抨击。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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