![](/img/trans.png)
[英]How to get each edittext value from the listview while click inside listview button
[英]Get updated value from EditText in a ListView
我有一個DialogFragment,其中有ListView,每個ListItem具有三個TextView和一個EdiText,EditText允許根據用戶要求更改整數值。 因此,對話框的肯定按鈕的onClick我想將更新的Integer值發送到服務器。 在獲取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;
}
}
嘗試用adapter.getView(i)
替換yourListView.getChildAt(i)
。
我想這會有所幫助。
在您的適配器中添加文本更改偵聽器,例如
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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.