动态增加 ListView 的 item,且 item 中有 EditText
来源:互联网 发布:网络摄像机ip搜索软件 编辑:程序博客网 时间:2024/06/06 20:45
效果图
需求分析
第一个界面跳转第二个界面需要携带一个 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 大小为 5 时:
关于列表携带 EditText
最常见的 ListView 中携带有输入框 EditText,取值和复用都是问题,其实这是一种不合理的设计,但是需求如此,也没办法,课通过上述写法解决焦点、取值问题。
关于上面 demo 的适配器布局就不用贴了,很简单。
公众号「code小生」,共享技术(不仅仅 Android)资源,做认真的分享,结识志同道合,编程路上,你我为伴,勇往直前!
Android开发资源经验分享
Android面试专辑
阅读全文
1 2
- 动态增加 ListView 的 item,且 item 中有 EditText
- 安卓ListView的item中含有EditText,动态添加item时EditText值的保存
- ListView中Item有EditText,焦点问题
- Edittext In Listview,当listview的item中有edittext时,怎么保存edittext的值?
- ListView中使用带Edittext的item
- ListView修改item中EditText
- Android开发之旅一Listview的item中有edittext
- Android开发之旅一Listview的item中有edittext
- 自定义控件——可拖拽排序的ListView (在ListView的item中有EditText控件)
- ListView中item点击事件和item中radiobutton的点击editText输入焦点问题
- Recyclerview item中有EditText使用刷新遇到的坑!!!!!
- 关于listview的item中如果有textview,listview点击item没有效果的解决办法
- ListView的item中有button ImageButton CheckBox EditText等时 点击事件失效问题的解决
- ListView的item中有button ImageButton CheckBox EditText等时 点击事件失效问题的解决
- listView的item中点击显示隐藏部分时,listView的高度无变化,且最后的item被挤出屏幕
- html中动态的增加和删除item
- ListView 增加的item滚动方式
- 增加listview的item点击水纹效果
- 虚拟机和开发版文件传输之NFS篇
- JAVA学习49_Java生成和操作Excel文件
- HDOJ 1160 FatMouse's Speed (结构体排序+动态规划)详解
- scikit-learn学习笔记(二)load_files加载自己的文件
- 欢迎使用CSDN-markdown编辑器
- 动态增加 ListView 的 item,且 item 中有 EditText
- linux内核修炼之道(20170727)
- C
- 数字和字符串类型
- day13(StringBuffer,Arrays,基本类型包装类)
- SDUT-数据结构实验之链表九:双向链表
- mq-2-多broker配置
- 4. Median of Two Sorted Arrays
- mdsplus之通过C和C++远程访问