我有一个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)
我想这会有所帮助。

08-17 23:58