我通过意图将数据从一个活动发送到另一个活动。我发送两个不同的字符串,但在下一个活动中获得两个变量的相同值。
这是我的代码:
public class Quizzes extends ActionBarActivity {
protected static final String QUIZ_TITLE = null;
protected static final String COURSE = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quizzes);
listView = (ListView) findViewById(R.id.listview);
String[] values = new String[] { "Quiz # 2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, values);
listView.setAdapter(adapter);
// ListView Item Click Listener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
Intent intent = new Intent(getApplicationContext(), QuizDetail.class);
intent.putExtra(QUIZ_TITLE, item);
final String course = (String)textview.getText();
intent.putExtra(COURSE, course);
startActivity(intent);
}
});
}
}
如果你看到我传递了两个字符串意图对象: 1. QUIZ_TITLE 2.课程
当我调试应用程序时,我可以看到像这样的值 1. QUIZ_TITLE =“测验#1” 2. COURSE =“计算简介”
直到这里都很好,但是当我在其他活动中检索这些字符串时,我正在为两者获得“计算简介”的价值,这里是该类的代码。
public class QuizDetail extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz_detail);
Intent intent = getIntent();
String quizTitle = intent.getStringExtra(Quizzes.QUIZ_TITLE);
TextView quizTitleTextView = (TextView) findViewById(R.id.quizTitle);
quizTitleTextView.setText(quizTitle+" : TESTING..");
String courseTitle = intent.getStringExtra(Quizzes.COURSE);
TextView courseTitleTextView = (TextView) findViewById(R.id.courseTitle);
courseTitleTextView.setText(courseTitle);
}
}
我不确定为什么我从Quizzes.QUIZ_TITLE和Quizzes.COURSE获得相同的值“计算简介”。 任何帮助都将受到高度赞赏。
谢谢.. Anjum
答案 0 :(得分:1)
你使用了bad.putExtra(),
您需要将key
(您需要知道)作为第一个参数,以便在其他活动中获取对象,如:
...
String item = ...;
intent.putExtra("COURSE", item);
...
你得到额外的东西:
...
intent.getStringExtra("COURSE");
...
编辑!!!
答案 1 :(得分:1)
这里有几件事需要提及。
QUIZ_TITLE
和COURSE
都为空(我无法看到它们的设置位置)
当您向Extras Bundle添加内容时,您将值放入字典中。在这种情况下,您正在使用的这个字典的键是null。这意味着第二次你输入字典时,QUIZ_TITLE
(null)被替换为键COURSE
(null)。
如果您将QUIZ_TITLE
和COURSE
更改为实际的字符串值,则应对该问题进行排序。
第二点需要注意的是,getExtraString
和getExtras.getString
之间存在差异。我已经写过关于here
希望有所帮助。
答案 2 :(得分:0)
请试试这个
Intent intent = getIntent();
String quizTitle = intent.getExtras().getString(Quizzes.QUIZ_TITLE);
String courseTitle = iintent.getExtras().getString(Quizzes.COURSE);
更新
哦现在我也看到了:
protected static final String QUIZ_TITLE = null;
protected static final String COURSE = null;
实际上是致命的,因为对键使用空值是没有用的,即使有可能首先为键'null'设置值并覆盖它,然后再次设置键'null'的值。
将其更改为:
protected static final String QUIZ_TITLE = "extra_quiz_title"
protected static final String COURSE = "extra_course";
例如