2016-05-25 21 views
3

Ich habe über das Internet und SO seit Stunden gesucht. Ich habe zahlreiche Beispiele/Antworten zum Hinzufügen von Elementen aus ArrayList zu einer anderen ArrayList gesehen, kann aber nichts finden, was erklärt, wie Elemente einer ArrayList zu ArrayList hinzugefügt werden.Wie fügt man Artikel von ArrayList <Model> zu ArrayList <String> in Android?

Ich habe einen Assistenten, der Auswahlen in zwei verschiedenen ArrayLists speichert. Der erste Bildschirm speichert die ausgewählten Elemente in einer ArrayList, ein anderer Bildschirm speichert ausgewählte Elemente in einer ArrayList, und auf dem letzten Bildschirm werden die in der ArrayList ausgewählten Elemente angezeigt.

Ich habe versucht stringArrayList.add(modelArrayList), aber das gibt den Fehler, dass String nicht auf das Modell angewendet werden kann.

EDIT: Hinzugefügt Klassen

Um zu klären und die Dinge klarer, was mit ich arbeite. Ich implementiere einen "Wizard" mit WizarDroid Library und die Seite, die ich versuche zwei verschiedene ArrayLists zusammenzuführen, basiert auf diesem Tutorial here.

Model-Klasse:

public class NSBaseModel { 
    private String baseName; 

    public NSBaseModel(String name) 
    { 
     baseName = name; 

    } 

    public String getBaseName() { 
     return baseName; 
    } 

} 

Wizard Seite:

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


} 

In meiner Klasse Createlist Ich habe public static ArrayList<String> nsList = new ArrayList<String>();

EDIT

gelöst mein Problem dank @Polichronis Charitidis . Seine Antwort war die richtige Lösung. Der Grund, warum es für mich nicht funktionierte, ist, dass ich int i in meinen beiden for-Schleifen deklariert hatte, was das System und das Ergebnis verwirrte. Ich musste die int i Variable in meiner zweiten for Schleife zu einem anderen Buchstaben ändern und jetzt funktioniert es. So sieht meine zweite "for" -Schleife jetzt aus.

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

       } 
+0

Wo ist 'stringArrayList' und' modelArrayList' Deklaration, und was ist in ihnen? –

+0

Sie können nicht, können Sie nur Typ String hinzufügen zur Liste und Sie können nur Typ Modell Zur Liste hinzufügen

+0

zeigen Sie Ihre 'Modell –

Antwort

2

Sie benötigen diese Linie

stringArrayList.add(modelArrayList); 

zu, dies zu ändern:

stringArrayList.add(modelArrayList.get(i).getBaseName()); 

so, dass Sie den String name vom Typ Arraylist zum String Arraylist hinzufügen.

+0

Damit sehe ich meine app laufen kann und gehen Sie durch den Assistenten, aber auf der letzten Seite, wo es eine Liste aller ausgewählten Elemente anzeigen soll, zeigt es eine Liste von NSBaseModel @ 42042840 und so weiter mit jedem Element mit einer anderen Nummer nach NSBaseModel @ wenn es angezeigt werden soll Die Zeichenfolge –

+0

Ja, weil Sie immer noch die NSBaseModel ArrayList und nicht die von Ihnen erstellte Zeichenfolge verwenden. Ändern Sie es und versuchen Sie es erneut. – xro7

+0

Ok. Ich glaube, ich habe dich missverstanden. Könnten Sie bitte etwas genauer erläutern oder erläutern? Ich bin kein totaler Noob, aber ich bin auch nicht fortgeschritten. :) –

0

warum nicht, ist eine Schleife über sie und konvertieren jedes Element in eine neue Arraylist von Strings selbst:

List<String> strings = new ArrayList<>(); 
for (Object yourmodelArralistObject: list) { 
strings.add(yourmodelArralistObject!= null ? 
yourmodelArralistObject.toString() : null); 
} 

Beachten Sie, dass Sie gegen die Schnittstelle werden erklären sollte (java.util.List in dieser Fall), nicht die Implementierung.

0

Zum einen, im obigen Code (den ich hier nicht zitiere, weil es schlicht falsch ist), iterieren Sie durch die Array-Liste und bei jeder einzelnen Iteration fügen Sie die gesamte Array-Liste zu einer anderen hinzu. Das ist einfach falsch und wird nicht funktionieren.

  1. Zuerst stellen Sie sicher, die stringArrayList vor (Sie in dem obigen Code-Schnipsel, werden nicht angezeigt initialisieren, dass und ich erwarte, dass Sie so tun, aber nur um sicher ... für Schleifen

  2. Gebrauch zu sein, wie sie verwendet werden soll:

    Arraylist stringArrayList = new Arraylist <>(); for (int i = 0; i < modelArrayList.size(); i ++) { stringArrayList.add (modelArrayList.bekomme ich); }

  3. Wie String ist ein Object und nicht eine primitive, den Sie hinzufügen, Verweise auf die ArrayList und daher, auch wenn Sie es von einem ArrayList zu einem anderen hinzuzufügen, wird es das gleiche Objekt sein, und nicht zwei verschiedene Objects . Wenn Sie es in einem von ihnen ändern, wird es sich auch in dem anderen ändern. Implementieren Sie einen Weg, um es richtig zu kopieren.

Hoffe, dass hilft!

+0

Bitte meine bearbeiten –

Verwandte Themen