java - 将 strings.xml 中的数组添加到另一个 ArrayList

标签 java android arrays list

我正在尝试创建一个基于单选按钮调查的数组。我在 strings.xml 中为每个单选按钮都有数组。选择单选按钮后,应获取一个数组并将其放入哈希集中以过滤掉重复项,然后放入一个新数组以在单击提交按钮后显示在 fragment 中。以下为 Activity 主要部分:

    //SUBMIT BUTTON
    Button submit = (Button) findViewById(R.id.submitBtn);
    final Fragment fragment = new ListFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    //On Submit Click show Instrument Fragment
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final ArrayList filtered_list = new ArrayList<>();
            // Radio Button Selection
            if (firstrBtn.isChecked()){
                filtered_list.add(getResources().getStringArray(R.array.firstarray));

            } else if (secondrBtn.isChecked()){
                filtered_list.add(getResources().getStringArray(R.array.secondarray));
            } 

            //Convert filtered_list to final_filtered_list and eliminate duplicates
            final HashSet<String> hashSet = new HashSet<String>();
            hashSet.addAll(filtered_list);
            filtered_list.clear();
            filtered_list.addAll(hashSet);
            ArrayList<String> final_filtered_list = new ArrayList<String>(hashSet);

            //Send Final ArrayList
            Bundle bundle = new Bundle();
            bundle.putStringArrayList("RESULT_LIST", final_filtered_list);
            listFragment.setArguments(bundle);

            //Transaction to Fragment
            transaction.replace(R.id.collect_container, listFragment);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });

strings.xml 中的数组如下所示:

<array name="firstarray">
    <item> One </item>
    <item> Two </item>
</array>

<array name="secondarray">
    <item> Two </item>
    <item> Three </item>
</array>

所以答案应该是“一”、“二”和“三”的列表。 看起来很简单,但我的模拟器不断崩溃,我不知道出了什么问题。任何帮助将不胜感激。

以下是 Logcat 的一部分:

  019-11-17 16:59:07.354 32291- 
  32291/ E/AndroidRuntime: 
  FATAL EXCEPTION: main
  Process: PID: 32291
  java.lang.ClassCastException: java.lang.String[] cannot be cast to 
  java.lang.String
    at...

上面的代码指向一个列表适配器 Activity ,其中收集每个项目的位置,并在列表中的项目旁边添加图片。

看来我混淆了我的数据类型。对于迟到的编辑,我深表歉意。我在 java 编码方面相对较新,并且正在阅读兼容的数据类型。

最佳答案

将您的 onclick 修改为:

submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Bundle bundle = new Bundle();
        bundle.putStringArrayList("RESULT_LIST", Arrays.asList(getResultList()));
        listFragment.setArguments(bundle);

        //Transaction to Fragment
        transaction.replace(R.id.collect_container, listFragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }
});

添加一个辅助方法以从资源文件中获取适当的列表:

private String[] getResultList() {
    if (firstrBtn.isChecked()) {
        getResources().getStringArray(R.array.firstarray));
    }
    return getResources().getStringArray(R.array.secondarray));
}

你做错了什么:

  1. filtered_list.add(getResources().getStringArray(R.array.firstarray)); 将字符串数组(不是字符串)作为项目添加到列表中。
  2. 当您可以直接从 String[](来自字符串资源)转换为 ArrayList 时,无需从 HashSet 转换为 ArrayList。

关于java - 将 strings.xml 中的数组添加到另一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886770/

相关文章:

java - 使用 HTML 调整 JLabel ImageIcon 的大小

java - 在 LocationOverlay 对象的 .runOnFirstFix() 方法中取消 Runnable

c - 如何计算数组的移动平均值?

java - 如何使用另一个线程的数据更新 Activity 中的 View ?

java - @JsonFilter,自定义和性能

java - image.setImageResource()何时在函数内设置图像资源?

android - onSaveInstanceState 的 bundle 保存在哪里?

java - android & Java 中的外来字符

c - switch 还是 const table 更好? (嵌入式软件)

javascript - 如何在JavaScript中将PHP的explode (';' ,$s,3) 与 s.split (';' ,3) 匹配?