我似乎无法获得与 Intent 一起发送的额外信息。 Intent 正确加载下一个 Activity ,但没有负载。
来电者:
//a list item was clicked
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, ProgramTracks.class);
i.putExtra("_id", id);
startActivity(i);
}
接收者:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.program_tracks);
if( savedInstanceState != null )
{
mDateId = savedInstanceState != null ? savedInstanceState.getLong("_id") : null;
Toast.makeText(this, "ID " + mDateId, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Null!", Toast.LENGTH_SHORT).show();
}
}
list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.site.android.app"
android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ProgramTracks" android:label="@string/app_name">
</activity>
</application>
</manifest>
我不确定我错过了什么,但我的 if 保持 Toasting 为空。
编辑:如果我 Toast 或 Log 得到 putExtra()
的 id
变量,它就被设置了。
最佳答案
在您的原始 Activity 中,您将“_id”作为您的 Intent 的额外内容,但在第二个 Activity 中,您试图从 savedInstanceState 中检索 long。
相反,你应该这样做:
Intent myIntent = getIntent();
Long id = myIntent.getLongExtra("_id", 0);
如果没有找到带标签“_id”的 long,默认值为 0。
这是 another question关于从 savedInstanceState 和 Intents 获取额外信息的区别。
这是 developer page关于在 Intents 中放置/获取额外内容。
关于Android - Intent.putExtra() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469773/