我有一个活动,我从那里开始第二个活动:
public void onItemSelected(long id) {
// start the detail activity for the selected item ID.
Intent detailIntent = new Intent(this, FeedDetailActivity.class);
detailIntent.putExtra(FeedDetailFragment.ARG_ITEM_ID, id);
startActivityForResult(detailIntent, DETAIL_REQUEST_ID);
}
在辅助活动中,我这样做:
if (getArguments().containsKey(ARG_ITEM_ID))
{
long id = getArguments().getLong(ARG_ITEM_ID);
[...]
}
但是当执行getLong时,我得到一个类强制转换异常,声明参数是java.lang.Integer。我在调试器中运行它,并注意到Intent是使用类型为Long的id创建的,但是它的id为Integer类型并且值设置为0(参见屏幕截图)。
发生了什么事?
答案 0 :(得分:0)
您正在将Intent
传递给FeedDetailActivity
。但是从我FeedDetailFragment
FeedDetailActivity
内的FeedDetailActivity
读取额外内容。所以得到错误的价值。
尝试此方法
首先阅读if(getIntent().hasExtras(ARG_ITEM_ID) {
id = getIntent().getLongExtra(ARG_ITEM_ID);
}
的onCreate方法的额外内容,因为我们从活动中读取了这些内容。
beginTransaction().replace(/*YourContainer*/, FeedDetailFragment.getInstance(id))
使用FeedDetailFragment
在public static FeedDetailFragment getInstance(long userId) {
FeedDetailFragment mFragment = new FeedDetailFragment();
Bundle mBundle = new Bundle();
mBundle.putLong(ARG_ITEM_ID, userId);
mFragment.setArguments(mBundle);
return mFragment;
}
中创建一个函数
if (getArguments() != null && getArguments().containsKey(ARG_ITEM_ID)) {
ID= getArguments().getLong(ARG_ITEM_ID, -1);
}
现在您可以从FeedDetailFragment
中读取您的ID{{1}}