2016-04-21 76 views
0

我有一個DialogFragment,其中有ListView,每個ListItem有三個TextViews和一個EdiText,EditText允許可以根據用戶需求更改整數值。所以onClick的正面按鈕的對話框我想發送thoes更新整數值到服務器。 在獲取EditText的文本時,它會提取舊值而不是更新的值。從ListView中的EditText獲取更新值

我已經寫

View v; 

    ArrayList<String> edValues = new ArrayList<String>(); 

    EditText et; 

          for (int i = 0; i < alObj.size(); i++) { 
           v = adapter.getView(i, null, null); 
           et = (EditText) v.findViewById(R.id.user_bill_edit); 

//對話框

public class CaseUserList extends DialogFragment { 


    private Context context; 
    private String pipeSeparatedUserLists; 
    Boolean isOperationEdit = false; 
    String strCaseId = null; 
    private UserBillRateAdapter adapter; 
    ArrayList<Object> alObj; 

    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     context = getActivity(); 
     strCaseId = getArguments().getString(CaseConstants.TABLE_CASE_LIST_CASE_ID); 
     //isOperationEdit = getArguments().getBoolean("isEdit"); 

     //Send network request to get the list 
     new userBillRateList().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

     //Prepare the list layout 
     View view = getActivity().getLayoutInflater().inflate(R.layout.layout_case_user_list, null); 
     builder .setView(view) 
       .setPositiveButton("Update", new Dialog.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int id) { 
         View v; 
         ArrayList<String> edValues = new ArrayList<String>(); 
         EditText et; 

         for (int i = 0; i < alObj.size(); i++) { 
          v = adapter.getView(i, null, null); 
          et = (EditText) v.findViewById(R.id.user_bill_edit); 
          edValues.add(et.getText().toString()); 
         } 
        } 
       }) 

       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         CaseUserList.this.getDialog().cancel(); 
        } 
       }); 
     return builder.create(); 
    } 

    /** 
    * Async task to fetch list of all possible Witness 
    */ 
    private class userBillRateList extends AsyncTask<Void, Void, ArrayList<Object>> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected ArrayList<Object> doInBackground(Void... voids) { 
      Network billRateList = new Network(getActivity(),CaseConstants.SERVICE_CASE_USER_BILL_RATE 
        + Constants.CONSTANT_CONTACT_ID + "," 
        + strCaseId); 

      return HelperFunctions.convertJsonToDataModel(billRateList.getJsa_Output(), 
        UserBillingRateModel.class); 
     } 

     @Override 
     protected void onPostExecute(final ArrayList<Object> arrayList) { 
      super.onPostExecute(arrayList); 
      alObj = arrayList; 
      ListView allListsView = (ListView) getDialog().findViewById(R.id.list_view_case_user_list); 

      if(arrayList.isEmpty()) { 
       ((TextView) getDialog().findViewById(R.id.user_list_empty_text_view)).setVisibility(View.VISIBLE); 
      } else { 
       ((EditText)getDialog().findViewById(R.id.user_list_search)).setVisibility(View.VISIBLE); 
       adapter = new UserBillRateAdapter(getActivity(),arrayList); 

       allListsView.setAdapter(adapter); 
       allListsView.setTextFilterEnabled(true); 
      } 
      getDialog().show(); 
     } 
    } 
} 
            edValues.add(et.getText().toString()); 
           } 

//適配器

public class UserBillRateAdapter extends BaseAdapter { 
    /** 
    * The following variable contains the File list in the CloudFileList bean format. 
    */ 
    private ArrayList<Object> al_List; 
    /** 
    * The context of the activity being worked on 
    */ 
    private Context context; 
    ViewHolder viewContainer = null; 
    ArrayList<Object> alDataObj; 

    public UserBillRateAdapter(Context context, ArrayList<Object> al_List){ 
     this.al_List = al_List; 
     this.context = context; 
     alDataObj = new ArrayList<>(); 
    } 

    @Override 
    public int getCount() { 
     if(al_List != null) 
      return al_List.size(); 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return al_List.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return Long.valueOf(((UserBillingRateModel) al_List.get(position)).ContactId); 
    } 

    @Override 
    public View getView(int position,View viewConvert, ViewGroup parent) { 
     LayoutInflater mInflater = (LayoutInflater) 
       context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     viewContainer = null; 
     if(viewConvert == null) { 
      viewConvert = mInflater.inflate(R.layout.layout_user_bill_list, null); 
      viewContainer = new ViewHolder(); 
      viewContainer.txtUserName = (TextView) viewConvert.findViewById(R.id.user_name_txt); 
      viewContainer.txtUserRole = (TextView) viewConvert.findViewById(R.id.user_role); 
      viewContainer.txtUserRate = (TextView) viewConvert.findViewById(R.id.user_bill_txt); 
      viewContainer.edUserRate = (EditText) viewConvert.findViewById(R.id.user_bill_edit); 
      viewConvert.setTag(viewContainer); 
     } else 
      viewContainer = (ViewHolder) viewConvert.getTag(); 

     final UserBillingRateModel beanListItem = (UserBillingRateModel) al_List.get(position); 
     viewContainer.txtUserName.setText(beanListItem.FullName); 
     viewContainer.txtUserRate.setText(beanListItem.BillingRate); 
     viewContainer.txtUserRole.setText(beanListItem.RoleName); 
     viewContainer.edUserRate.setText(beanListItem.BillingRate); 
     return viewConvert; 
    } 

    public class ViewHolder{ 
     TextView txtUserName; 
     TextView txtUserRole; 
     TextView txtUserRate; 
     EditText edUserRate; 
    } 
} 
+0

肯定按鈕點擊獲取價值你在哪裏發送這些變量和你在哪裏在你的UI更新呢? – Pooya

+0

你可以在這裏發佈你的對話框和適配器代碼嗎? –

+0

您應該簡單地使用_getChildAt(i)_ – Piyush

回答

1

嘗試yourListView.getChildAt(i)更換adapter.getView(i)的代碼。
我想這會有所幫助。

+0

從listView中獲取子視圖它的工作原理謝謝! :) –

+0

歡迎您;)請將答案標記爲正確。如果你願意的話,你也可以放心。謝謝! –

0

在適配器中添加文本更改偵聽像

EditText searchTo = (EditText)findViewById(R.id.medittext); 
searchTo.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

     //store value in your POJO class 
     // like getItem(position).setUserEnterValue(s.toString()); 
    } 

}); 

從適配器像

for (int i = 0; i < alObj.size(); i++) { 
    edValues.add(list.getAdapter().getItem(i).getUserEnterValue()); 
}