在列表视图中动态编辑文本add/remove

Edittext add/remove dynamically in listview

在列表视图中,我在单击按钮时动态添加和删除列表的行(项目),在单个列表行(项目)中有两个编辑文本,我已经非常努力地在自定义中获得两个编辑文本的值带有 pojo class 的列表视图,但无法这样做,即使没有获得所有 edittext 的值,明智的。

请帮帮我,在此先感谢!

private class NewCoachExerienceEditAdapter extends BaseAdapter {

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

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

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView( final int position, View convertView, ViewGroup parent) {

            final ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                LayoutInflater inflater = UserEditProfileCoachActivity.this.getLayoutInflater();
                convertView = inflater.inflate(R.layout.new_edit_pro_exp_row, null);

                holder.et_coach_edit_pro_exp_academy_name = (EditText) convertView.findViewById(R.id.et_coach_edit_pro_exp_academy_name);
                holder.et_edit_coach_pro_exp_comments = (EditText) convertView.findViewById(R.id.et_edit_coach_pro_exp_comments);
                holder.iv_edit_coach_pro_exp_add = (ImageView) convertView.findViewById(R.id.iv_edit_coach_pro_exp_add);
                holder.iv_edit_coach_pro_exp_remove = (ImageView) convertView.findViewById(R.id.iv_edit_coach_pro_exp_remove);
                holder.ll_coach_edit_pro_exp_from = (LinearLayout) convertView.findViewById(R.id.ll_coach_edit_pro_exp_from);
                holder.ll_coach_edit_pro_exp_to = (LinearLayout) convertView.findViewById(R.id.ll_coach_edit_pro_exp_to);

                convertView.setTag(holder);

            } else {

                holder = (ViewHolder) convertView.getTag();
            }

            newCoachProExperienceItem = newCoachProExpArrList.get(position);
            holder.ref = position;

            tv_edit_coach_edit_pro_exp_from = (TextView) convertView.findViewById(R.id.tv_edit_coach_edit_pro_exp_from);
            tv_edit_coach_edit_pro_exp_to = (TextView) convertView.findViewById(R.id.tv_edit_coach_edit_pro_exp_to);

            holder.et_coach_edit_pro_exp_academy_name.setText(newCoachProExperienceItem.getCoach_exp_academy_str());
            holder.et_edit_coach_pro_exp_comments.setText(newCoachProExperienceItem.getCoach_exp_coach_comment_str());

            holder.iv_edit_coach_pro_exp_add.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    newCoachProExperienceItem = new NewCoachProExperienceItem();
                    newCoachProExpArrList.add(newCoachProExperienceItem);
                    notifyDataSetChanged();
                }
            });

            holder.iv_edit_coach_pro_exp_remove.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    newCoachProExpArrList.remove(position);
                    notifyDataSetChanged();
                }
            });

            holder.et_coach_edit_pro_exp_academy_name.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                }

                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                }

                @Override
                public void afterTextChanged(Editable arg0) {

                    newCoachProExpArrList.get(position).setCoach_exp_academy_str(arg0.toString());

                    Log.e(position + " : ",  arg0.toString());
                }
            });
            return convertView;
        }
        }


        private class ViewHolder {
            EditText et_edit_coach_pro_exp_comments, et_coach_edit_pro_exp_academy_name;
            ImageView iv_edit_coach_pro_exp_add, iv_edit_coach_pro_exp_remove;
            LinearLayout ll_coach_edit_pro_exp_from, ll_coach_edit_pro_exp_to;
            int ref;
        }   

我已经尝试了这两个,但没有得到任何解决方案。

for(int i=0; i

                Log.e("newCoachProExpArrList.size()", newCoachProExpArrList.size() + "" );
                Log.e("test_arr_list.size()", test_arr_list.size() + "" );
                for(int ce = 0; ce < newCoachProExpArrList.size(); ce++){
                    Log.e(ce + " test_arr_list" , test_arr_list.get(ce));
                    Log.e(ce + "" , newCoachProExpArrList.get(ce).getCoach_exp_academy_str());
                }

我认为 ViewHolder 有问题。如果你想添加或删除项目,你可以针对你需要的所有可见视图生成项目布局,而不是在视图持有者中注册所有视图,例如,如果你必须在按钮上删除一些视图,请单击 viewHolder.someView.setVisibility(View.GONE );或者显示 viewHolder.someView.setVisibility(View.VISIBLE);但我认为这不是最好的解决方案。

我有两个选择,不是我所需要的,总之如下两件事:首先打开一个弹出窗口 window 然后添加新行并通知适配器,其次是增加的大小动态列表视图。