我已经在互联网和SO上搜寻了几个小时。我看到了许多有关如何将ArrayList中的项目添加到另一个ArrayList的示例/答案,但似乎找不到任何解释如何从一个ArrayList添加项目到另一个ArrayList的内容。
我有一个向导,可以将选择保存到两个不同的ArrayList中。第一个屏幕将所选项目保存到一个ArrayList中,另一屏幕将所选项目保存到另一个ArrayList中,然后最后一个屏幕显示从ArrayList中选择的总项目数。
我已经尝试过stringArrayList.add(modelArrayList)
,但是它会产生错误,指出String不能应用于model。
编辑:添加类
为了更清楚地阐明我正在处理什么,我正在使用WizarDroid库实现“向导”,而我试图在其中一个基于此多选择教程的页面here上合并两个不同的ArrayList。
模型类:
public class NSBaseModel {
private String baseName;
public NSBaseModel(String name)
{
baseName = name;
}
public String getBaseName() {
return baseName;
}
}
向导页面:
public class FormStepBase extends WizardStep {
ArrayList<NSBaseModel> baseNames;
ArrayList<NSBaseModel> selectedItems = new ArrayList<NSBaseModel>();
NSBaseAdapter myAdapter;
ListView myListView;
//You must have an empty constructor for every step
public FormStepBase() {
}
//Set your layout here
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
List<String> Lines = Arrays.asList(getResources().getStringArray(R.array.NAL_smoothie_base));
baseNames = new ArrayList<NSBaseModel>();
baseNames.add...//Long list of items here
View v = inflater.inflate(R.layout.step_base, container, false);
myListView = (ListView)v.findViewById(R.id.nsBaseListView);
myAdapter = new NSBaseAdapter(v.getContext(), R.layout.row_base_layout, baseNames);
myListView.setAdapter(myAdapter);
myListView.setItemsCanFocus(false);
return v;
}
/**
* Called whenever the wizard proceeds to the next step or goes back to the previous step
*/
@Override
public void onExit(int exitCode) {
switch (exitCode) {
case WizardStep.EXIT_NEXT:
//saveBaseIngredients();
final SparseBooleanArray checkedItems = myListView.getCheckedItemPositions();
int checkedItemsCount = checkedItems.size();
for (int i = 0; i < checkedItemsCount; ++i) {
// Item position in adapter
int position = checkedItems.keyAt(i);
// Add team if item is checked == TRUE!
if(checkedItems.valueAt(i))
selectedItems.add(myAdapter.getItem(position));
for (int i = 0; i < selectedItems.size(); i++) {
selectedItems.get(i);
System.out.print("option list size");
System.out.print(selectedItems.size());
//reference to static ArrayList<String> here
CreateList.nsList.add(selectedItems);
}
}
if(selectedItems.size() < 2)
Toast.makeText(getContext(), "Need to select two or more items.", Toast.LENGTH_SHORT).show();
else
{
// Just logging the output.
for(NSBaseModel t : selectedItems)
Log.d("SELECTED TEAMS: ", t.getBaseName());
//Thought I could get the strings from here since they show in the logcat
}
break;
case WizardStep.EXIT_PREVIOUS:
//Do nothing...
break;
}
}
}
在我的CreateList类中,我有一个
public static ArrayList<String> nsList = new ArrayList<String>();
。编辑:
感谢@Polichronis Charitidis,他的答案最终解决了我的问题。它没有为我工作的原因是因为我在我的两个for循环中都声明了
int i
,从而混淆了系统和结果。我不得不将我的第二个for循环中的int i
变量更改为另一个字母,现在它可以正常工作了。这是我现在的第二个“for”循环的样子。for (int j = 0; j < selectedItems.size(); j++) {
selectedItems.get(i);
System.out.print("option list size");
System.out.print(selectedItems.size());
CreateList.nsList.add(selectedItems.get(j).getBaseName());
}
stringArrayList
和modelArrayList
的声明在哪里?它们里面装了什么? - Shree Krishna