嘿伙计们,所以我对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代码进行布局?
答案 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()方法。