如何通过意图传递子列表

时间:2018-08-27 10:13:41

标签: android list android-intent sublist

我正尝试通过top50TrendsListIntent传递给另一个活动,如下代码所示,但是它被标记为红色,并且收到一条错误消息,内容为:

2nd parameter cant be cast to Serializable

尽管类Trend实现了Serializable接口。

请让我知道如何通过top50TrendsListIntent传递给另一个活动?谢谢。

代码

    List<Trend> top50TrendsList = this.mTrendsList.subList(0, 2);
Collections.sort(this.mTrendsList);
    Intent intentSendBroadcast = new Intent();
    intentSendBroadcast.setAction(ActMain.CONST_BROADCAST_ACTION_ON_LIST_READY);
    Bundle b = new Bundle();
    b.putSerializable(TwitterTrendsAPIService.CONST_BUNDLE_KEY_SERIALIZED_LIST, top50TrendsList);
    intentSendBroadcast.putExtras(b);
    sendBroadcast(intentSendBroadcast);

4 个答案:

答案 0 :(得分:0)

您的Trend应该是Parcelable,然后您就可以这样做

intent.putParcelableArrayListExtra("myArrayList" , top50TrendsList);

看看this来了解parceable,以及如何使您的课程parceable

希望这会有所帮助。

答案 1 :(得分:0)

ArrayList实现序列化而不是List。您正在通过List(接口)引用提供一个对象(Java具有单个调度,因此要调用的重载方法变量是在编译时通过引用类型而不是运行时的实际对象类型来标识的)。通过ArrayList引用传递它,我认为可以满足您的目标。

答案 2 :(得分:0)

使用包裹式

public class Test implements Parcelable
{
    List<String> list;

    protected Test(Parcel in) {
        list = in.createStringArrayList();
    }

    public Test()
    {}

    public static final Creator<Test> CREATOR = new Creator<Test>() {
        @Override
        public Test createFromParcel(Parcel in) {
            return new Test(in);
        }

        @Override
        public Test[] newArray(int size) {
            return new Test[size];
        }
    };

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStringList(list);
    }
}

在Model类上的setList并传递给另一个活动:

List<String> list = new ArrayList<>();
        Test test = new Test();
        test.setList(list);

        Intent intent = new Intent(this, Main2Activity.class);
        intent.putExtra("list", test);
        startActivity(intent);

要从第二个活动中获取数据:

if (getIntent().hasExtra("list"))
        {
            List<String> list = new ArrayList<>();
            Test test = getIntent().getParcelableExtra("list");
            list.addAll(test.getList());
        }

答案 3 :(得分:-1)

您的趋势类应实现这样的Serializable

  

公共类趋势工具   可序列化