理解getIntExtra()参数 [英] Understanding getIntExtra() arguments
问题描述
@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
。
I cannot see why R.id.leo
has been specified? turtle_id
is the name but I am not sure the point of R.id.leo
.
的片段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>
使用过的教程是这里。
推荐答案
从意图中检索扩展数据。
Retrieve extended data from the intent.
参数
name
所需项目的名称。
defaultValue
如果没有以给定名称存储所需类型的值,则返回的值。
defaultValue
the value to be returned if no value of the desired type is stored with the given name.
返回
之前使用putExtra()或默认值,如果没有找到。
the value of an item that previously added with putExtra() or the default value if none was found.
所以在你的例子中, id
将被分配给我与键 turtle_id
关联的nteger值,如果该键存在于 Intent
中,将被赋予整数值 R.id.leo
如果没有。通常,如果消费者在启动此活动
时未能传递必要信息,则使用此方法以便提供合理的默认值。在您的特定情况下,此行为可以解释为:如果调用者忘记告诉我在启动此活动
时选择了哪只乌龟,则假设它是Leo。
So in your example, id
will be assigned the integer value associated with the key turtle_id
if that key exists in the Intent
, and will be assigned the integer value R.id.leo
if not. Typically, this is used so that sensible defaults are provided if a consumer fails to pass in the requisite information when starting this Activity
. In your particular case, this behavior can be interpreted as: "if the caller forgot to tell me which turtle was selected when starting this Activity
, assume it was Leo."
这篇关于理解getIntExtra()参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!