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.
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
Ich stimme Ihnen, Selecsosi, zu Gut für System Ich frage mich auch, ob es dafür eine gute Methode gibt. – devJason