【发布时间】:2019-04-17 17:05:38
【问题描述】:
我有一个字符串数组列表,我需要将它传递给另一个活动。我正在使用意图来做同样的事情。但是,在目标活动中获取 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。
【问题讨论】:
-
在将列表添加到意图之前检查列表的大小
-
onDataChange()回调将异步发生。您的Intent构造和startActivity()调用将在onDataChange()运行之前发生。如果您正确格式化代码,每个人都会更容易看到这一点。 -
谢谢。这有帮助。将所有内容放在 onDataChange() 函数中。