为什么我不能将我的 ArrayList 发送到另一个片段?



有两个片段:A和B。从片段A,我想将ArrayList(数据(发送到片段B。

action((-一种应该进行数据传输和转换到片段B的方法(使用navigate(((。程序构建时没有错误,但当您单击操作方法所附的按钮时,会发生崩溃,错误如下:

java.lang.IollegalArgumentException:参数包中"array"的参数类型错误。应为java.util.ArrayList

它说我在Bundle中插入了一个错误类型的参数,需要一个ArrayList。但它是一个ArrayList,不是吗?

请帮忙,我已经解决这个问题两天了。我的代码在下面。

片段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不正常。请帮忙!非常感谢。

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

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

最新更新