android 仿Listview增删数据
来源:互联网 发布:python 最优化算法包 编辑:程序博客网 时间:2024/06/05 02:08
android 仿Listview增删数据
最近想要实现如下图。有的功能有,点击减号删除,点击蓝色字体部分添加居住地。
分析写法
第一下看到这个,我的想法是使用listview来写,然后再item中实例化减号和EditText,点击减号删除这一行,让ListView的最后一项改称为自定义的布局,可是当我使用这种方法来写的时候,出现了一个问题,因为我是在Item点击事件中进行实例化的,所以相当于要双击才会有反应。
很简单,第一次点击的响应是被item拦截了,被item消化了,这个时候才实例化了减号,然后减号才有了点击事件。自己估计了一下,可能要对点击事件进行修改,但由于鄙人对这个方面不是很了解,本着简化的想法,突然萌生了一种想法。
先上代码,已经包装成为了一个工具类,备注也写得很详细了
import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;import com.baibian.R;import java.util.ArrayList;import java.util.List;/** * 这是一个用来代替ListView的一个布局,里面内置了方法有, * 初始化数据,获取所有editview的字符串 */public class LinearLayout_Inflaterable { private LayoutInflater layoutInflater; private Context context; private LinearLayout linearLayout; private View view;//点击添加的视图view private List<String> edit_string_list=null;//文本框的字符串list private List<String> data;//传入的数据源 private List<View> layoutlist; private int maxChildCount; public LinearLayout_Inflaterable(Context context, LinearLayout linearLayout, View view , List<String> data,int maxChildCount){ this.context=context; this.linearLayout=linearLayout; this.view=view; this.data=data; this.maxChildCount=maxChildCount-1; layoutlist=new ArrayList<>(); layoutInflater= LayoutInflater.from(context); } public void initlayout(){ for (int i =0;i<data.size();i++){ init_add_layout(data.get(i)); } view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { add_layout(); } }); } //获取所有edittext的数据 public List<String> getEdit_String_List(){ edit_string_list=new ArrayList<String>(); for(int i=0;i<linearLayout.getChildCount();i++){ EditText editText=(EditText) linearLayout.getChildAt(i).findViewById(R.id.edit_text); String string= editText.getText().toString(); edit_string_list.add(string); } return edit_string_list; } //初始化时有元素传入的添加布局 private void init_add_layout(String string ){ final View textlayout=layoutInflater.inflate(R.layout.edit_information_listitem,null); layoutlist.add(textlayout); linearLayout.addView(textlayout); View remove_btn=(View) textlayout.findViewById(R.id.remove_btn); EditText textView=(EditText) textlayout.findViewById(R.id.edit_text); textView.setText(string); remove_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { linearLayout.removeView(textlayout); }}); } //点击增加的无数据传入的时候使用添加布局 private void add_layout(){ if (linearLayout.getChildCount()<=maxChildCount){ final View textlayout=layoutInflater.inflate(R.layout.edit_information_listitem, null); layoutlist.add(textlayout); linearLayout.addView(textlayout); View remove_btn=(View) textlayout.findViewById(R.id.remove_btn); EditText textView=(EditText) textlayout.findViewById(R.id.edit_text); remove_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { linearLayout.removeView(textlayout); } }); }else { int realmaxChildCount =maxChildCount+1; Toast.makeText(context,context.getString(R.string.maxadd)+ realmaxChildCount +context.getString(R.string.maxadd2),Toast.LENGTH_SHORT).show(); } } //获取linearlayout子布局数量 public int getChildCount(){ return linearLayout.getChildCount(); }}
使用的代码
house_linearlayout_inflaterable=new LinearLayout_Inflaterable(this,house_LinearLayout,add_house_layout,data,10 ); house_linearlayout_inflaterable.initlayout();
xml文件 edit_informationlayout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="10dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:clickable="true" android:id="@+id/remove_btn" android:layout_gravity="center_vertical" android:src="@mipmap/red_minus" android:layout_width="20dp" android:layout_height="20dp" /> <EditText android:singleLine="true" android:id="@+id/edit_text" android:maxLength="15" android:paddingTop="3dp" android:background="@null" android:textSize="15sp" android:hint="请添加居住地" android:layout_width="wrap_content" android:layout_height="30dp" /></LinearLayout>
使用的地方
<LinearLayout android:layout_marginLeft="3dp" android:layout_marginTop="3dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_gravity="center_vertical" android:src="@mipmap/gray_house" android:layout_width="20dp" android:layout_height="20dp" /> <TextView android:textSize="15sp" android:text="居住地" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:id="@+id/house_LinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout> <include android:id="@+id/add_house_layout" layout="@layout/edit_information_listitem_bottom"/>
edit_information_listitem_bottom
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="20dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_gravity="center_vertical" android:src="@mipmap/blue_add" android:layout_width="20dp" android:layout_height="20dp" /> <TextView android:padding="3dp" android:textColor="@color/baibian_back_color" android:textSize="15sp" android:text="添加居住地" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
解决的思路
利用layoutInflater来对layout进行布局的填充,点击加号的时候就填充一个新的布局,同时实例化减号,减号的响应事件是直接删除当前item.
新手入门作品,能力有限,希望大神可以进行指点,谢谢。
0 0
- android 仿Listview增删数据
- android 对listview数据的增删改查
- android 对listview数据的增删改查
- android 对listview数据的增删改查
- android listview仿iphone特效
- android listview仿iphone特效
- android仿通讯录ListView效果
- android仿通讯录ListView效果
- android仿通讯录ListView效果
- android仿通讯录ListView效果
- android仿通讯录ListView效果
- android仿通讯录ListView效果
- listView数据实现增删后动态刷新
- android中增删改查数据库数据并加载到ListView
- android之listView之增删改查
- android-BaseAdapter实现ListView增删改
- Android对ListView控件增删改查
- Android对ListView控件增删改查
- C语言基础 单链表(上)
- LeetCode : Valid Parentheses
- DeepID人脸识别算法之三代
- 杨辉三角
- 程序员面试经典--汉诺塔
- android 仿Listview增删数据
- Rikka with Graph(水题)
- Android学习(5)——小案例(SharedPreference)
- 基于MCS-51内核的汇编操作符笔记
- 数组中两个数异或求最大值
- JAVA接口
- 生成xml
- 真正的大神
- 一、SpringBoot精要