Android 工作室。仅捆绑 returns 所选中的最后一个值

Android studio. Bundle returns only the last value from selected

我有一个带有自定义适配器的 listView,其中有一个 checkBoxTextView,当我 select 一些复选框时,我将它们添加到bundle 并发送到另一个 fragment。在该片段中,我有一个简单的 TextView,我需要在其中从 bundle 获取值并显示在该 TextView 中。但问题是,当我从捆绑包中获取 selected 值并在 TextView 中设置时,它只显示最后一个值。我该如何解决这个问题?谢谢。

这里是我将 selected 值添加到包中的片段。

nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ArrayList<Profession> professionList = dataAdapter.getProfessionList();
            ArrayList<String> getProfessions = new ArrayList<>();
            personalInfoFragment = new PersonalInfoFragment();
            for (int i = 0; i < professionList.size(); i++) {
                Profession profession = professionList.get(i);
                if (profession.isSelected()) {
                    getProfessions.add(profession.getName());

                    Bundle setProfessions = new Bundle();
                    setProfessions.putStringArrayList("String", getProfessions);

                    personalInfoFragment.setArguments(setProfessions);
                }
            }
            replaceFragment();
        }
    });

好的,看这里。 PersonalInfoFragment 是我需要发送值的片段。 replaceFragment 方法替换了片段。我完成了调试,并且成功地将 selected 值添加到捆绑包中。 在 nextButton 单击它会将 selected 数据保存到包中并替换片段。

现在这是我需要获取捆绑包并在 textView 中显示的片段。

Bundle bundle = getArguments();

    if (bundle != null) {
        ArrayList<String> getProfessionName = bundle.getStringArrayList("String");
        if (getProfessionName != null) {
            for (int i = 0; i < getProfessionName.size(); i++) {
                profession_text.setTextColor(Color.BLACK);
                profession_text.setText(getProfessionName.get(i) + ",");
            }
        }
    }

ProfessionText 是我的 textView,我需要在其中设置值。但是在该 textView 中仅显示捆绑包中的最后一项。如何解决这个问题?感谢阅读。

您可以像这样更改您的代码,

for (int i = 0; i < professionList.size(); i++) {
    Profession profession = professionList.get(i);
    if (profession.isSelected()) {
        getProfessions.add(profession.getName());
       }
}
Bundle setProfessions = new Bundle();
setProfessions.putStringArrayList("String", getProfessions);
personalInfoFragment.setArguments(setProfessions);
replaceFragment();

在下一个片段中,

profession_text.setTextColor(Color.BLACK);
profession_text.setText("");
if (getProfessionName != null) {
    for (int i = 0; i < getProfessionName.size(); i++) {
        String txt = profession_text.getText().toString() + getProfessionName.get(i) + ", ";
        profession_text.setText(txt);
    }
}

据我所知..你需要一个值列表才能正确显示..这里发生的是在每次迭代中你为专业文本设置一个新值,它会覆盖以前存在的值..这就是为什么你看到最后一个值..我认为如果你想要一个文本视图列表,你必须在循环中创建一个新的文本视图..在这种情况下你最好使用列表视图或回收视图。