2016-07-21 5 views
0

Ich brauche die Daten, die ich zu meinem ArrayList fieldsImages außerhalb der Methode hinzufügen, wo ich Daten hinzufügen, wenn ich die Daten der fieldsImages innerhalb der 'Done' Methode anfordern, funktioniert es richtig, da die Daten da sind, aber Außerhalb dieser Methode hat das Feld Bilder keine Daten, es ist leer.Wie können Daten in einer Liste für eine Methode für alle Klassen-Java beibehalten werden?

Wie kann ich die Daten zu fieldsImages innerhalb der Methode gemacht gemacht bleiben bleiben für die ganze Klasse?

Bitte beachten Sie, dass meine "Done" -Methode innerhalb einer anderen "Done" -Methode verschachtelt ist. diese Methoden sind aus Parse.com (Backend, die ich für das Projekt verwende)

public class ChooseFieldDialogFragment extends DialogFragment { 

     List<String> fieldsNamesInfo = new ArrayList<String>(); 
     List<String> fieldsTypeInfo = new ArrayList<String>(); 
     List<String> fieldsSizeInfo = new ArrayList<String>(); 

     //THIS ONE IS THE LIST THAT I NEED TO KEEP THE DATA ADDED ON THE METHOD DONE 
     List<Integer> fieldsImages = new ArrayList<Integer>(); 


     ListView chooseFieldList; 
     String mTitle; 
     Long mTime; 
     String mVenueId; 


     @Override 
     public void onCreate(@Nullable Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      Bundle bundle = this.getArguments(); 
      mTitle = bundle.getString("venueName"); 
      mTime = bundle.getLong("reservTime"); 
      mVenueId = bundle.getString("venueId"); 



      setShowsDialog(false); 
     } 

     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

      View dialogView = inflater.inflate(R.layout.choose_field_list, container, false); 


      chooseFieldList = (ListView) dialogView.findViewById(R.id.chooseFragmentList); 



       ParseQuery<ParseObject> query = ParseQuery.getQuery("Field"); 

       ParseObject fieldObj = ParseObject.createWithoutData("Venue", mVenueId); 
       query.whereEqualTo("venueId", fieldObj); 
       query.setLimit(1000); 
       query.findInBackground(new FindCallback<ParseObject>() { 
        public void done(final List<ParseObject> fieldList, ParseException e) { 
         if (e == null) { 



          for (int i = 0; i < fieldList.size(); i++){ 
           fieldsNamesInfo.add(fieldList.get(i).getString("name")); 
           fieldsTypeInfo.add(fieldList.get(i).getString("type")); 
           fieldsSizeInfo.add(fieldList.get(i).getString("size")); 


           ParseQuery<ParseObject> query = ParseQuery.getQuery("Reservation"); 

           final ParseObject fieldObj = ParseObject.createWithoutData("Field", fieldList.get(i).getObjectId()); 
           query.whereEqualTo("fieldId", fieldObj); 
           query.whereEqualTo("date", mTime); 
           query.findInBackground(new FindCallback<ParseObject>() { 
            public void done(final List<ParseObject> reservForFieldList, ParseException e) { 
             if (e == null) { 

              Log.d("FUNCIONO", Integer.toString(reservForFieldList.size())); 

              if (reservForFieldList.isEmpty()){ 
               Log.d("argegandoVerde","aaaaa"); 
    //HERE I ADD DATA TO THE LIST           fieldsImages.add(R.drawable.onfield); 
              } 
              else{ 
               Log.d("argegandoGris","uuuuu"); 

    //HERE I ADD DATA TO THE LIST           fieldsImages.add(R.drawable.offfield); 

              } 




             } else { 
              Log.d("venue", "Error: " + e.getMessage()); 
             } 
     //HERE THE ARRAY LIST fieldsImages IS CORRECTLY POPULATED WITH MY DATA 

            } 
           }); 

//HERE MY ARRAY LIST LOSES THE DATA AND GETS EMPTY 

           Log.d("qqqqqq", Integer.toString(fieldsImages.size())); 


          } 


          Log.d("qqqqqq", Integer.toString(fieldsImages.size())); 





    //HERE IS WHERE I NEED TO USE THE DATA THAT I ADDED TO THE ARRAY LIST fieldsImages BUT AT THIS POINT IT IS EMPTY. 
          ChooseFieldCustomAdapter customAdapter = new ChooseFieldCustomAdapter(getContext(), fieldsNamesInfo, fieldsImages, fieldsTypeInfo); 
          chooseFieldList.setAdapter(customAdapter); 


         } else { 
          Log.d("venue", "Error: " + e.getMessage()); 
         } 
        } 
       }); 

       final AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create(); 
       alertDialog.setTitle(mTitle); 
       alertDialog.setView(dialogView); 
       alertDialog.show(); 


       return dialogView; 
     } 
    } 

Danke fürs Lesen.

Antwort

0

Ich bin nicht sicher, ob ich Ihren Fokus sinnvoll, aber Sie möchten die Daten der FelderImages Liste zu halten? Wenn ja, deklarieren Sie die FelderBildliste als statisch und legen Sie die Daten fest. Danach können Sie es überall verwenden. Viel Glück!

+0

Ich würde nicht empfehlen, diese Liste als statisches Mitglied zu speichern. Wenn Sie möchten, können Sie eine Accessor-Methode schreiben, die das außerhalb des Dialogs zurückgibt (z. B. public List getFieldImages() {return this.fieldImages;}.) Da Statiken Mitglieder auf Klassenebene sind, wird man Probleme mit beiden haben null oder inkorrekte Verweise Die obige Methode kann dann außerhalb in einer Aktivität oder einem anderen Fragment mit einem unsicheren Cast '((ChooseFieldDialogFragment) -Fragment aufgerufen werden.) .getFieldImages();' – Selecsosi

+0

Ich stimme Ihnen, Selecsosi, zu Gut für System Ich frage mich auch, ob es dafür eine gute Methode gibt. – devJason

Verwandte Themen