Android意图的数据未在另一项活动中正确执行

时间:2014-12-04 09:25:16

标签: android android-intent

我通过意图将数据从一个活动发送到另一个活动。我发送两个不同的字符串,但在下一个活动中获得两个变量的相同值。

这是我的代码:

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

3 个答案:

答案 0 :(得分:1)

你使用了bad.putExtra(),

您需要将key(您需要知道)作为第一个参数,以便在其他活动中获取对象,如:

...

String item = ...;

intent.putExtra("COURSE", item);

...

你得到额外的东西:

...

intent.getStringExtra("COURSE");

...

编辑!!!

答案 1 :(得分:1)

这里有几件事需要提及。

QUIZ_TITLECOURSE都为空(我无法看到它们的设置位置) 当您向Extras Bundle添加内容时,您将值放入字典中。在这种情况下,您正在使用的这个字典的键是null。这意味着第二次你输入字典时,QUIZ_TITLE(null)被替换为键COURSE(null)。

如果您将QUIZ_TITLECOURSE更改为实际的字符串值,则应对该问题进行排序。

第二点需要注意的是,getExtraStringgetExtras.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";

例如