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

来源:互联网 发布:网络摄像机ip搜索软件 编辑:程序博客网 时间:2024/06/06 20:45

效果图

xiaoguotu

需求分析

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

功能代码

  • 第一个界面 xml
 <?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
 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;/** * Decription:动态增加 listview 的 item 条数,item 中带有 edittext * <p> * Created by codexiaosheng on 2017/7/24. */public class MainActivity extends AppCompatActivity {    private Button btnOk;    private EditText etInputMain;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        btnOk = (Button) findViewById(R.id.btn_ok);        etInputMain = (EditText) findViewById(R.id.et_input_main);        btnOk.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String input = etInputMain.getText().toString().trim();                if (!TextUtils.isEmpty(input)) {                    Intent intent = new Intent(MainActivity.this, AddItemActivity.class);                    intent.putExtra("COUNT",Integer.parseInt(input));                    startActivity(intent);                }            }        });    }}
  • 第二个界面 xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <Button        android:id="@+id/btn_show_log"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="right"        android:foreground="?attr/selectableItemBackground"        android:text="show Log"        android:textAllCaps="false"        android:textSize="14sp" />    <ListView        android:id="@+id/lv_item_add"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:dividerHeight="1dp" /></LinearLayout>
  • 第二个界面 java
package com.codexiaosheng.listviewwithedittext;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;/** * Decription: * <p> * Created by codexiaosheng on 2017/7/24. */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大小为2时log

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

list大小为5时log

关于列表携带 EditText

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

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


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


Android开发资源经验分享

Android面试专辑

阅读全文
1 2
原创粉丝点击