2017-12-14 4 views
0

인터넷에서 긴 검색 후 요구 사항을 충족시킬 수있는 해결책을 찾지 못했습니다. 하나의 배열 목록이 대화 상자 조각으로 전달되지만 내 요구 사항은 다음과 같습니다. 사용자가 날짜를 선택하면 웹 서비스를 다시 호출하고 데이터에 따라 다른 데이터를 가져 와서 같은 대화 상자 조각을 전달합니다. 어떻게하면 될까요? 정적 값으로 시도했지만 값을 지우지 않았습니다.하나의 대화 상자 조각에서 다른 대화 상자 조각으로 배열 목록 데이터를 전달하는 방법은 무엇입니까?

public static class DatePickerDialogFragment extends DialogFragment implements 
     DatePickerDialog.OnDateSetListener 
{ 
    String userName; 


    public interface UserUserIdListener { 
     void updateIdUserName(String userName); 


    } 
    public static final int FLAG_START_DATE = 0; 
    public static final int FLAG_END_DATE = 1; 
    public static List<Orederlist>reportorderIdList=new ArrayList<>(); 
    // private List<Userlist> reportUserList = new ArrayList<>(); 


    private int flag = 0; 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Calendar calendar = Calendar.getInstance(); 

     int year = calendar.get(Calendar.YEAR); 
     int month = calendar.get(Calendar.MONTH); 
     int day = calendar.get(Calendar.DAY_OF_MONTH); 

     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    public void setFlag(int i) { 
     flag = i; 
    } 


    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     Calendar calendar = Calendar.getInstance(); 
     Calendar calendar1=Calendar.getInstance(); 
     calendar1.set(year, monthOfYear, dayOfMonth); 
     calendar.set(year, monthOfYear, dayOfMonth); 
     String reportOrderIds=""; 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 

     if (flag == FLAG_START_DATE) { 
      textviewFromDate.setText(format.format(calendar.getTime())); 
      fromDateReport=textviewFromDate.getText().toString(); 

      JSONObject pieObject = new JSONObject(); 
      try 
      { 
       pieObject.put("fromDate",""+fromDateReport); 
       pieObject.put("orderId",""+reportOrderIds); 
       pieObject.put("password",""+sPrefs.getString(Constants.PASSWORD,"")); 
       pieObject.put("toDate",""+toDateReport); 
       pieObject.put("user",""+sPrefs.getString(Constants.USER_NAME,"")); 
       pieObject.put("subUser",""+reportSubUsers); 
       progressDialog = new ProgressDialog(getContext()); 
       progressDialog.setMessage("Loading...."); 
       progressDialog.setCancelable(false); 
       progressDialog.show(); 



      } catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      // String TAG = "delivered"; 
      RequestQueue requestQueue = Volley.newRequestQueue(getContext()); 
      JsonObjectRequest jsOnbjRequest = new 
        JsonObjectRequest(Request.Method.POST, 
          Constants.GetSummarizedReports, pieObject, 
          new Response.Listener<JSONObject>() { 
           @Override 
           public void onResponse(JSONObject response) 
           { 
            progressDialog.dismiss(); 
            try { 
             JSONArray jsonArray = (JSONArray) response.get("orderlist"); 
             { 
              if (jsonArray.length()>0) 
              { 
               for (int i = 0; i < jsonArray.length(); i++) { 
                JSONObject json = jsonArray.getJSONObject(i); 
                // Integer name = json.optInt(); 
                String name = json.optString("orderId").toString(); 
                Orederlist user = new Orederlist(name); 
                user.setOrderId(name); 
                reportorderIdList.add(user); 

               }} 
             } 
            } catch (Exception e) { 
             e.printStackTrace(); 
            } 

           } 
          }, 

          new Response.ErrorListener() { 
           @Override 
           public void onErrorResponse(VolleyError error) { 
            progressDialog.dismiss(); 

           } 
          }) { 
         @Override 
         public String getBodyContentType() { 
          return "application/json"; 
         } 

        }; 
      jsOnbjRequest.setRetryPolicy(new DefaultRetryPolicy(500000, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

      requestQueue.add(jsOnbjRequest); 

     } else if (flag == FLAG_END_DATE) { 
      textviewToDate.setText(format.format(calendar1.getTime())); 
      toDateReport= textviewToDate.getText().toString(); 
      JSONObject pieObject = new JSONObject(); 

      try 
      { 
       pieObject.put("fromDate",""+fromDateReport); 
       pieObject.put("orderId",""+reportOrderIds); 
       pieObject.put("password",""+sPrefs.getString(Constants.PASSWORD,"")); 
       pieObject.put("toDate",""+toDateReport); 
       pieObject.put("user",""+sPrefs.getString(Constants.USER_NAME,"")); 
       pieObject.put("subUser",""+reportSubUsers); 

       progressDialog = new ProgressDialog(getContext()); 
       progressDialog.setMessage("Loading...."); 
       progressDialog.setCancelable(false); 
       progressDialog.show(); 



      } catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      // String TAG = "delivered"; 
      RequestQueue requestQueue = Volley.newRequestQueue(getContext()); 
      JsonObjectRequest jsOnbjRequest = new 
        JsonObjectRequest(Request.Method.POST, 
          Constants.GetSummarizedReports, pieObject, 
          new Response.Listener<JSONObject>() { 
           @Override 
           public void onResponse(JSONObject response) 
           { 
            progressDialog.dismiss(); 

            try { 
             JSONArray jsonArray = (JSONArray) response.get("orderlist"); 
             { 
              if (jsonArray.length()>0) 
              { 
               for (int i = 0; i < jsonArray.length(); i++) { 
                JSONObject json = jsonArray.getJSONObject(i); 
                // Integer name = json.optInt(); 
                String name = json.optString("orderId").toString(); 
                Orederlist user = new Orederlist(name); 
                user.setOrderId(name); 
                reportorderIdList.add(user); 

               } 


              } 
             } 
            } catch (Exception e) { 
             e.printStackTrace(); 
            } 
           } 
          }, 

          new Response.ErrorListener() { 
           @Override 
           public void onErrorResponse(VolleyError error) { 
            progressDialog.dismiss(); 

           } 
          }) { 
         @Override 
         public String getBodyContentType() { 
          return "application/json"; 
         } 

        }; 
      jsOnbjRequest.setRetryPolicy(new DefaultRetryPolicy(500000, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

      requestQueue.add(jsOnbjRequest); 

     } 
    } 


} 

과 대화 조각 통과 데이터를위한 것입니다 : 내 코드는

FragmentManager managerOrderIds = getSupportFragmentManager(); 
      UserJobIds dialogOrderIds = new UserJobIds(); 
      dialogOrderIds.setdata(orderIdList,reportorderIdList);//with static array list which is not claer the value 
      dialogOrderIds.show(managerOrderIds, "Dialog"); 
+0

페이지는 (https://developer.android.com/training/basics/fragments/communicating.html) – ADM

+0

[조각과 통신] 난은 이미 보았다하지만 내 요구 사항은 내가 ilst 같은 배열을 내가 어떻게 할 수 있습니다 배열리스트 데이터를 액티비티로 가져오고 그것을 다른 대화 상자로 전달하는 것으로부터 – ashish

+0

액티비티를 브릿지로 사용하면 부모 컨테이너에서 두 조각 모두를 사용할 수 있습니다. – ADM

답변

0

당신이 대화 조각 다음, 여기에 데이터를 할당 쇼 (전화의 단지)를 위해서, newInstance를 만들 수 있습니다 무엇을 할 수 아래. 예입니다.

당신이 대화 상자를 보여

public class D2Fragment extends DialogFragment { 
private ArrayList<String> list; 
public static D2Fragment getInstanceFor(ArrayList<String> list){ 
    D2Fragment d2Fragment=new D2Fragment(); 
    d2Fragment.list=list; 
    return d2Fragment; 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.item_dialog, container, 
      false); 
    getDialog().setTitle("DialogFragment Sample"); 
    Log.e("size",list.size()+"");// Here is the list 
    // Do something else 
    return rootView; 
} 

}.

ArrayList<String> list=new ArrayList<>(); 
    list.add("Val1"); 
    list.add("Val2"); 
    D2Fragment d2Fragment=D2Fragment.getInstanceFor(list); 
    d2Fragment.show(getSupportFragmentManager(),"dialog2"); 

또는은 당신의 데이터에 대한 세터를 만들 수 있습니다.

public class D2Fragment extends DialogFragment { 
private ArrayList<String> list; 
public void setData(ArrayList<String> list){ 
    this.list=list; 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.item_dialog, container, 
      false); 
    getDialog().setTitle("DialogFragment Sample"); 
    Log.e("size",list.size()+"");// Here is the list 
    // Do something else 
    return rootView; 
} 

}

및 대화 상자를 표시합니다.

ArrayList<String> list = new ArrayList<>(); 
    list.add("Val1"); 
    list.add("Val2"); 
    D2Fragment d2Fragment = new D2Fragment(); 
    d2Fragment.setData(list); 
    d2Fragment.show(getSupportFragmentManager(), "dialog2"); 

활동 중에는 거래 당시 할당 한 특정 DialgFragment 태그로 언제든지 찾을 수 있습니다.

Fragment fragment=getSupportFragmentManager().findFragmentByTag("dialog2"); 
      if(fragment!=null && fragment instanceof D2Fragment){ 
       ((D2Fragment)fragment).call();// You can call any public method of this dialog fragment here 
      } 
+0

부사장 님 덕분에 ADM 덕분에 이미 동일한 작업을 수행했습니다. 원하는 방식으로 날짜 선택기 대화 상자에서 사용자 정의 배열 목록 개체를 가져 와서 다른 대화 상자 조각을 전달할 수 있습니다. 이미 배열 목록 개체가 있습니다. – ashish

+0

그게 내가 그냥 문자열 ArrayList 위의 의미 setData() formate 난 그냥 위의 의미. – ADM

+0

사실, 대화 상자 조각이 날짜 선택 도구이기 때문에 실제로 혼란 스럽습니다. – ashish

관련 문제