登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 118|回复: 5

动态增加 ListView 的 item,且 item 中有 EditText,listview动态添

[复制链接]

220

主题

220

帖子

1455

安币

手工艺人

发表于 2017-11-14 10:24:27 | 显示全部楼层 |阅读模式
效果图

        

需求分析

        第一个界面跳转第二个界面需要携带一个 list 过去,然后根据 list 的大小通过 listview 来展示这些数据,并且可以在 listview 的 item 中输入信息,然后提交这些信息…

功能代码第一个界面 xml
[Java] 查看源文件 复制代码
 <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <Button        android:id="@+id/btn_ok"        android:layout_width="120dp"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:foreground="?attr/selectableItemBackground"        android:text="确定"        android:textColor="@android:color/holo_blue_dark"        android:textSize="16sp" />    <EditText        android:id="@+id/et_input_main"        android:layout_width="match_parent"        android:layout_height="45dp"        android:layout_above="@id/btn_ok"        android:layout_centerInParent="true"        android:layout_marginBottom="15dp"        android:layout_marginLeft="45dp"        android:layout_marginRight="45dp"        android:background="@null"        android:gravity="center"        android:hint="动态增加的总条数"        android:inputType="number"        android:textColor="@android:color/holo_purple"        android:textSize="14sp" /></RelativeLayout>
第一个界面 Java
[Java] 查看源文件 复制代码
 package com.codexiaosheng.listviewwithedittext;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.EditText;public class AddItemActivity extends AppCompatActivity {    private String TAG = getClass().getSimpleName();    private int intItemCount;    private Context mContext;    private Button btnShowLog;    private ListView listView;    private SparseArray<String> mStringSparseArray; // 用来存储输入的信息    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mContext = this;        if (getIntent() != null) {            intItemCount = getIntent().getIntExtra("COUNT", 0);        }        initView();    }    private void initView() {        setContentView(R.layout.activity_additem);        btnShowLog = (Button) findViewById(R.id.btn_show_log);        listView = (ListView) findViewById(R.id.lv_item_add);        MyAdapter adapter = new MyAdapter();        listView.setAdapter(adapter);        btnShowLog.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (mStringSparseArray == null)                    return;                for (int i = 0; i < mStringSparseArray.size(); i++) {                    Log.e(TAG, "position-->> " + i + "---" + mStringSparseArray.get(i));                }            }        });    }// 适配器    public class MyAdapter extends BaseAdapter {        public MyAdapter() {            mStringSparseArray = new SparseArray<>();        }        @Override        public int getCount() {            return intItemCount;        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            EditTextHolder editTextHolder;            if (convertView == null) {                convertView = LayoutInflater.from(mContext)                        .inflate(R.layout.item_with_edittext_layout, parent, false);                editTextHolder = new EditTextHolder();                editTextHolder.mEditText = (EditText) convertView.findViewById(R.id.et_input_zhiye);                editTextHolder.myTextWatcher = new MyTextWatcher(position, mStringSparseArray);                editTextHolder.mEditText.addTextChangedListener(editTextHolder.myTextWatcher);                convertView.setTag(editTextHolder);            } else {                editTextHolder = (EditTextHolder) convertView.getTag();                editTextHolder.updatePosition(position);            }            editTextHolder.mEditText.setText(mStringSparseArray.get(position));            return convertView;        }        class EditTextHolder {            EditText mEditText;            MyTextWatcher myTextWatcher;            public void updatePosition(int position) {                myTextWatcher.updatePosition(position);            }        }        private SparseArray<String> sparseArrays;        class MyTextWatcher implements TextWatcher {            private int position;            public void updatePosition(int position) {                this.position = position;            }            public MyTextWatcher(int position, SparseArray<String> sparseArray) {                this.position = position;                sparseArrays = sparseArray;            }            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {            }            @Override            public void afterTextChanged(Editable s) {                sparseArrays.put(position, s.toString());            }        }    }}

        这里是最重要的部分,主要是 Listview 中的 edittext 获取值的方式,采用上面的方式,可以达到想要的效果,请看下面截图:

        第一个界面传 list 大小为 2 时:

        

        第一个界面传 list 大小为 5 时:

        

关于列表携带 EditText

        最常见的 ListView 中携带有输入框 EditText,取值和复用都是问题,其实这是一种不合理的设计,但是需求如此,也没办法,课通过上述写法解决焦点、取值问题。

        关于上面 demo 的适配器布局就不用贴了,很简单。

  

        公众号「code小生」,共享技术(不仅仅 Android)资源,做认真的分享,结识志同道合,编程路上,你我为伴,勇往直前!

        Android开发资源经验分享

        Android面试专辑


        

0

主题

1万

帖子

-2479

安币

限制会员

发表于 2017-11-15 02:09:51 | 显示全部楼层
感谢大神~

0

主题

8354

帖子

-2459

安币

限制会员

发表于 2017-11-15 14:02:56 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

7

主题

8632

帖子

-2052

安币

限制会员

发表于 2017-11-16 02:23:59 | 显示全部楼层
不错不错,楼主辛苦了。。。

0

主题

8344

帖子

-2472

安币

限制会员

发表于 2017-11-16 17:29:23 | 显示全部楼层
感谢大神~

1

主题

8415

帖子

-2638

安币

限制会员

发表于 2017-11-17 17:53:18 | 显示全部楼层
感谢大神~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表