我正在尝试创建一个基于单选按钮调查的数组。我在 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));
}
你做错了什么:
filtered_list.add(getResources().getStringArray(R.array.firstarray));
将字符串数组(不是字符串)作为项目添加到列表中。- 当您可以直接从 String[](来自字符串资源)转换为 ArrayList 时,无需从 HashSet 转换为 ArrayList。
关于java - 将 strings.xml 中的数组添加到另一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886770/