发送Intent会更改Extra参数的类型

时间:2015-07-23 11:49:36

标签: android android-intent android-activity

我有一个活动,我从那里开始第二个活动:

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(参见屏幕截图)。

The intent as I create it 我创建它时的意图

enter image description here 我收到它的意图

发生了什么事?

1 个答案:

答案 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}}