0
ArrayList fieldsImagesに追加するデータを使用する必要があります。メソッドの外側にあるfieldsImagesのデータを要求したときに、データが存在するため正しく動作しますが、そのメソッドの外では、fieldsImagesにはデータがありません。空です。すべてのクラスのメソッドのリストにデータを追加する方法を教えてください。
メソッド内部のfieldsImagesに追加されたデータを、すべてのクラスでそのままにすることはできますか?
私の「完了」メソッドは別の「完了」メソッドの中に入れ子になっています。 これらの方法には、(私はプロジェクトのために使用していたバックエンド)Parse.comから読書のための
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;
}
}
感謝しています。
静的メンバーとしてそのリストを格納することはお勧めしません。あなたが望むのであれば、ダイアログの外でそれを返すアクセサメソッドを書くことができます(例えば 'public List getFieldImages(){return this.fieldImages;}')。静的はクラスレベルメンバであることを考えると、上記のメソッドは、安全でないキャスト({(ChooseFieldDialogFragment)フラグメント} .getFieldImages(); ' –
Selecsosi
のSelecsosiに同意します。システムのために良い。私はそこにも良い方法があるのだろうかと思う。 – devJason