传递信息不适用于意图

时间:2012-03-28 15:48:40

标签: android android-activity android-intent bundle

我使用putExtra()将信息设置为一个intent,然后我用我的调试器检查信息是否真的存在(并且它是),然后我开始另一个活动:

startActivity(intent);

但是当我尝试访问存储的信息时:

Intent intent = getIntent();
Bundle b = intent.getExtras();

然后它返回null,实际上,我看到我的调试器没有附加捆绑的意图。

如何解决这个问题?


编辑:这是我如何添加额外内容:

这是我使用的功能:

private Intent baseClickFunction(JSONItem item){
    Intent i = new Intent(MainActivity.this, ItemActivity.class);
    i.putExtra("title", item.getProductName());
    i.putExtra("date", item.getTimestamp());
    i.putExtra("content", item.getFullDescription());

    return i;
}

mListView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> a, View v,int position, long id) 
            {

                Intent intent = new Intent(baseClickFunction((JSONItem) a.getItemAtPosition(position)));    

                startActivity(intent);
            }
        });

正如我之前所说的那样,我在调试器中检查了信息是否真的在我的意图之前开始一项新活动(而且是)。

我甚至试图这样做:

Intent i = new Intent(MainActivity.this, ItemActivity.class);
                i.putExtra("title", ((JSONItem) a.getItemAtPosition(position)).getProductName());
                i.putExtra("date", ((JSONItem) a.getItemAtPosition(position)).getTimestamp());
                i.putExtra("content", ((JSONItem) a.getItemAtPosition(position)).getFullDescription());
                startActivity(i);

并且它正常工作

编辑:我在AsyncTask的“protected void onPostExecute(Void result)”中设置我正在执行此操作的侦听器这一事实是否会对此产生任何影响?

编辑:当我在另一个项目中执行此操作时,它可以工作,但在这个项目中它不会... AsyncTasks,ListViews或tabViews会对此产生影响吗?

4 个答案:

答案 0 :(得分:1)

您应该执行以下操作:

mListView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> a, View v,int position, long id) 
        {
            startActivity(baseClickFunction((JSONItem) a.getItemAtPosition(position)));
        }
    });

您可能会使用以下行覆盖该包...

Intent intent = new Intent(baseClickFunction((JSONItem) a.getItemAtPosition(position)));    

实际上不需要创建新的Intent,因为你的方法已经返回了一个Intent。

答案 1 :(得分:0)

在致电startActivity(intent)之前,请确保将额外内容放入意图中。

Intent intent = new Intent(...);
intent.putExtra(...);
startActivity(intent);

答案 2 :(得分:0)

如果你这样做:

intent.putExtra("yourkey", value);

您可以使用

进行检索
Intent intent = getIntent();
intent.getIntExtra("yourKey", defaultValue);

如果你想使用bundle,你必须为bundle添加值,然后将bundle放入intent中,

intent.putExtras(bundle)
startActivity()

之前

答案 3 :(得分:0)

这种情况正在发生,因为你正在创造一个没有附加额外内容的新意图。

您要将附加内容附加到intent i,但使用intent intent开始活动。而不是创建新意图,将您要使用的意图设置为函数返回的意图。像这样:

Intent intent = baseClickFunction((JSONItem) a.getItemAtPosition(position));

希望这有帮助!