无法通过intent将数组列表从一个活动传递到另一个活动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过intent将数组列表从一个活动传递到另一个活动相关的知识,希望对你有一定的参考价值。
我有一个String ArrayList,我需要传递给另一个活动。我正在使用意图做同样的事情。但是,在目标活动中获取ArrayList时,它是空的。我通过bundle和putStringArrayList尝试过这个
第一项活动
final ArrayList<String> subtaskArray=new ArrayList<>();
final ArrayList<String> subtaskStatusArray=new ArrayList<>();
final DatabaseReference subNode=parentNode.child("subtask");
holder.noteCard.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
subNode.addValueEventListener(new ValueEventListener ()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
for (DataSnapshot d: dataSnapshot.getChildren())
subtaskDesc = d.child("SubtaskDescription").getValue().toString();
subtaskStatus = d.child("done").getValue().toString();
subtaskArray.add(subtaskDesc);
subtaskStatusArray.add(subtaskStatus);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
Intent intent = new Intent(Main2Activity.this, Checklist.class);
//intent.putStringArrayListExtra("subtaskDesc",subtaskArray);
//intent.putStringArrayListExtra("subtaskStatus",subtaskStatusArray); Bundle b=new Bundle();
b.putStringArrayList("subtaskDesc", subtaskArray);
intent.putExtras(b);
intent.putExtra("noteid", noteid);
intent.putExtra("Checklist_title", title);
intent.putExtra("flag", true);
startActivity(intent);
);
检索第二个活动:
try
noteid=getIntent().getStringExtra("noteid");
displayflag=getIntent().getBooleanExtra("flag",false);
//fetchList= getIntent().getStringArrayListExtra("subtaskDesc");
Bundle b=this.getIntent().getExtras();
fetchList = b.getStringArrayList("subtaskDesc");
Toast.makeText(this,""+fetchList.size(),Toast.LENGTH_SHORT).show();
catch (Exception e)
e.printStackTrace();
toast将数组列表的大小显示为0。
答案
首先,您需要将代码重构为此 -
protected void onCreate(@Nullable Bundle savedInstanceState, int resId)
super.onCreate(savedInstanceState);
//here you need to addValeEventListener, like this
subNode.addValueEventListener(new ValueEventListener ()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
for (DataSnapshot d: dataSnapshot.getChildren())
subtaskDesc = d.child("SubtaskDescription").getValue().toString();
subtaskStatus = d.child("done").getValue().toString();
subtaskArray.add(subtaskDesc);
subtaskStatusArray.add(subtaskStatus);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
然后,setOnClickListener
holder.noteCard.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Intent intent = new Intent(Main2Activity.this, Checklist.class);
//intent.putStringArrayListExtra("subtaskDesc",subtaskArray);
//intent.putStringArrayListExtra("subtaskStatus",subtaskStatusArray); Bundle b=new Bundle();
b.putStringArrayList("subtaskDesc", subtaskArray);
intent.putExtras(b);
intent.putExtra("noteid", noteid);
intent.putExtra("Checklist_title", title);
intent.putExtra("flag", true);
startActivity(intent);
);
以上是关于无法通过intent将数组列表从一个活动传递到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
将 Serializables 数组从一个活动传递到另一个活动时发生 Class Cast Exception
将Serializable数组从一个活动传递到另一个活动时的类Cast Exception