@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details);$$ // pull the turtle's ID out of the intent that the MainActivity used to load me Intent intent = getIntent(); int id = intent.getIntExtra("turtle_id", R.id.leo); String text = ""; if (id == R.id.leo) { text = TURTLE_DETAILS[0]; } else if (id == R.id.mike) { text = TURTLE_DETAILS[1]; } else if (id == R.id.don) { text = TURTLE_DETAILS[2]; } else { // if (id == R.id.raph) text = TURTLE_DETAILS[3]; }
我无法解决问题
int id = intent.getIntExtra("turtle_id", R.id.leo);
我看不到为什么R.id.leo被指定?turtle_id是名称,但我不确定R.id.leo。
R.id.leo
turtle_id
的片段 MainActivity.java
MainActivity.java
/* * Called when the Details activity finishes running and comes back to here. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } /* * Called when the user clicks on the large TMNT image button. * Loads the DetailsActivity for more information about that turtle. */ public void onClickTurtleImage(View view) { Intent intent = new Intent(this, DetailsActivity.class); RadioGroup group = (RadioGroup) findViewById(R.id.turtle_group); int id = group.getCheckedRadioButtonId(); intent.putExtra("turtle_id", id); startActivity(intent); } /* * This method is called when the user chooses one of the turtle radio buttons. * In this code we set which turtle image is visible on the screen in the ImageView. */ public void pickTurtle(View view) { ImageButton img = (ImageButton) findViewById(R.id.turtle); if (view.getId() == R.id.leo) { img.setImageResource(R.drawable.tmntleo); } else if (view.getId() == R.id.mike) { img.setImageResource(R.drawable.tmntmike); } else if (view.getId() == R.id.don) { img.setImageResource(R.drawable.tmntdon); } else if (view.getId() == R.id.raph) { img.setImageResource(R.drawable.tmntraph); } } }
DetailsActivity.java
/* * CS 193A, Winter 2015, Marty Stepp * This app is a continuation of our TMNT app from last week. * Today's version adds a second activity and launches that activity using an Intent. * This file represents the Java code for the second activity. */ package com.example.stepp.layoutfun; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class DetailsActivity extends Activity { /* * Constant array of data about each of the four turtles. * (This is not the most idiomatic way to store such information, * but we'll come back to it later.) */ private static final String[] TURTLE_DETAILS = { ""/*Long Story but not relevant for the question*/ }; /* * Called when the activity first gets created. */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); // pull the turtle's ID out of the intent that the MainActivity used to load me Intent intent = getIntent(); int id = intent.getIntExtra("turtle_id", R.id.leo); String text = ""; if (id == R.id.leo) { text = TURTLE_DETAILS[0]; } else if (id == R.id.mike) { text = TURTLE_DETAILS[1]; } else if (id == R.id.don) { text = TURTLE_DETAILS[2]; } else { // if (id == R.id.raph) text = TURTLE_DETAILS[3]; } TextView tv = (TextView) findViewById(R.id.turtle_info); tv.setText(text); } }
activity_main.xml
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:gravity="top|center" android:orientation="vertical" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <RadioGroup android:id="@+id/turtle_group" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButton android:id="@+id/leo" android:onClick="pickTurtle" android:text="Leo" android:checked="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/mike" android:onClick="pickTurtle" android:text="Mike" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/don" android:onClick="pickTurtle" android:text="Don" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/raph" android:onClick="pickTurtle" android:text="Raph" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RadioGroup> <ImageButton android:id="@+id/turtle" android:onClick="onClickTurtleImage" android:src="@drawable/tmntleo" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
二手教程在这里。
该方法的文档getIntExtra如下:
getIntExtra
从意图中检索扩展数据。 参量 name 所需项目的名称。 defaultValue 如果没有使用给定名称存储所需类型的值,则返回该值。 退货 以前使用putExtra()添加的项目的值;如果未找到,则为默认值。
从意图中检索扩展数据。
参量
name 所需项目的名称。
name
defaultValue 如果没有使用给定名称存储所需类型的值,则返回该值。
defaultValue
退货
以前使用putExtra()添加的项目的值;如果未找到,则为默认值。
因此,在您的示例中,如果该键存在于中,则将被分配id与该键关联的整数值;如果不turtle_id存在Intent,则将被分配该整数值R.id.leo。通常,使用此方法是为了在使用者启动this时未能传递必需的信息时提供合理的默认值Activity。在您的特定情况下,此行为可以解释为:“如果呼叫者在启动此操作时忘记告诉我选择了哪只乌龟Activity,则假定是狮子座。”
id
Intent
Activity