android-fragments 为什么我不能将数组列表发送到另一个片段?

0s7z1bwu  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(140)

有2个片段:A和B。我想从片段A向片段B发送数组列表(数据)。
action()-一个方法,在该方法中,数据传输和转换应该发生到片段B(使用navigate())。程序构建时没有错误,但当您单击action方法所附加的按钮时,会发生崩溃,错误如下:

  • java.lang.参数非法异常:参数包中“array”的参数类型错误。应为java.util.ArrayList。*

它说我在Bundle中插入了一个错误类型的参数,需要一个ArrayList。但它是一个ArrayList,不是吗?
请帮助,我一直在与这个问题斗争2天了。我的代码如下。
片段A代码:

package com.github.dev.app.pack;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.navigation.fragment.NavHostFragment;
import com.github.vladosspasi.mes.databinding.FragmentABinding;
import java.util.ArrayList;

public class FragmentA extends Fragment {

    private FragmentABinding binding;
    private ArrayList<Integer> data; // ArrayList that i want to send
    @Override
    public View onCreateView(
            LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState
    ) {
        binding = FragmentAsBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }

    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        data = new ArrayList<>(); 
        data.add(1);              

        binding.actionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                action();   //method with navigating to fragmentB and data transmitting
            }
        });
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

    private void action() {

        Bundle arg = new Bundle();
        arg.putSerializable("array", data); //putIntegerArrayList doesn't work either

        NavHostFragment.findNavController(FragmentA.this)
             .navigate(R.id.action_FragmentA_to_FragmentB, arg); //exception ocuring here

    }
}

nav_graph.xml中的片段声明:

<fragment
            android:id="@+id/FragmentA"
            android:name="com.github.dev.app.pack.FragmentA"
            android:label="Fragment A">
        <action
            android:id="@+id/action_FragmentA_to_FragmentB"
            app:destination="@id/FragmentB"/>
    </fragment>

    <fragment
            android:id="@+id/FragmentB"
            android:name="com.github.dev.app.pack.FragmentB"
            android:label="Fragment B">
        <argument android:name="array" app:argType="java.util.ArrayList"/>
    </fragment>

int、String和其他参数工作正常,但ArrayList工作不正常。请帮助!谢谢。

gcxthw6b

gcxthw6b1#

请使用下面的代码将数据从一个片段发送到另一个片段

Bundle bundle = new Bundle();
 bundle.putParcelableArrayList("array",data);

相关问题