2016-07-21 11 views
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; 
     } 
    } 

感謝しています。

答えて

0

私はあなたの焦点を理解することはできませんが、fieldsImagesリストのデータを保持したいと思いますか?その場合は、fieldsImageリストをstaticとして宣言し、データを配置します。 その後、どこでも使用できます。がんばろう!

+0

静的メンバーとしてそのリストを格納することはお勧めしません。あなたが望むのであれば、ダイアログの外でそれを返すアクセサメソッドを書くことができます(例えば 'public List getFieldImages(){return this.fieldImages;}')。静的はクラスレベルメンバであることを考えると、上記のメソッドは、安全でないキャスト({(ChooseFieldDialogFragment)フラグメント} .getFieldImages(); ' – Selecsosi

+0

のSelecsosiに同意します。システムのために良い。私はそこにも良い方法があるのだろうかと思う。 – devJason

関連する問題