【问题标题】:Unable to pass array list from one activity to another through intent无法通过意图将数组列表从一个活动传递到另一个活动
【发布时间】: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() 函数中。

标签: android android-intent


【解决方案1】:

首先你需要重构你的代码——

  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);
    }
});
}

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多