ListView视图动态增加与删除控件条目,内容
2017-02-05 17:35
573 查看
Listview动态增加与删除控件条目,条目内容可编辑,实现如下效果:
1、按+则增加控件条目,按x删除控件条目
2、编辑内容可保存,如下所示:
从网上找到一些代码不能用或有缺陷,现在将代码整理OK如下;
MainActivity代码(比较简单):
package com.example.listviewasitem;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView myList; // ListView控件
private AddNumberBaseAdpater addNumberBaseAdpater;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addNumberBaseAdpater=new AddNumberBaseAdpater(getApplicationContext());
myList = (ListView) findViewById(R.id.listview1);
myList.setAdapter(addNumberBaseAdpater);
}
}
AddNumberBaseAdpater代码:
package com.example.listviewasitem;
import java.util.ArrayList;
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
public class AddNumberBaseAdpater extends BaseAdapter {
private LayoutInflater mInflater;
private ArrayList<String> text;
int tindex = 0;
String temp;
int sp;
public AddNumberBaseAdpater(Context context) {
text = new ArrayList<String>();
text.add("第1个自定义控件条目");// 默认只加载1个Item
this.mInflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return text.size();
}
public Object getItem(int position) {
return text.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// final ViewHolder holder = new ViewHolder();
final ViewHolder holder;// 新建holder一定要放在if内
if (convertView == null) {
holder = new ViewHolder();// 新建holder一定要放在if内
convertView = mInflater.inflate(R.layout.addnumber, null);
holder.btnOpen = (ImageButton) convertView
.findViewById(R.id.ibtnAddNumber);
holder.editText = (EditText) convertView
.findViewById(R.id.editNumber);
convertView.setTag(holder);
} else {
// Log.d("getView","getView called convertView !== null ");
holder = (ViewHolder) convertView.getTag();
}
// ////////////////////////////////////////////////////////////////////////////
switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个
case 0:
holder.btnOpen
.setBackgroundResource(android.R.drawable.ic_input_add);// 第一项按钮则显示加号图片
// holder.editText.setText(text.get(tindex));
break;
default:
holder.btnOpen.setBackgroundResource(android.R.drawable.ic_delete);// 超过了一项则显示减号图片,可以删除
break;
}
holder.editText.setText(text.get(position));
holder.ref = position;
// //////////////////////////////////////////////////////////////////////////////
//添加EditText文本输入并保存到text.
holder.editText
.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
holder.editText.getText();
text.remove(position);
text.add(position, holder.editText.getText().toString());
}
});
holder.btnOpen.setOnClickListener(new View.OnClickListener() {// 添加按钮
public void onClick(View v) {
if (position == 0) {
// text.add("xxx");// 添加一项控件
tindex = tindex + 1;
text.add("第" + String.valueOf(tindex + 1)
+ "自定义控件条目:");// 添加一项控件
} else if (position > 0) {// 始终留一项不能删除
text.remove(position);// 删除选定按钮
// text.remove(text.size() - 1);// 删除最后一个按钮
tindex = tindex - 1;
}
notifyDataSetChanged();
}
});
return convertView;
}
private class ViewHolder {
public EditText editText;
public ImageButton btnOpen;
int ref;
}
}
布局文件比较简单,就不传了。原代码下载地址:http://download.csdn.net/detail/xiaozenbin/9747532
1、按+则增加控件条目,按x删除控件条目
2、编辑内容可保存,如下所示:
从网上找到一些代码不能用或有缺陷,现在将代码整理OK如下;
MainActivity代码(比较简单):
package com.example.listviewasitem;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView myList; // ListView控件
private AddNumberBaseAdpater addNumberBaseAdpater;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addNumberBaseAdpater=new AddNumberBaseAdpater(getApplicationContext());
myList = (ListView) findViewById(R.id.listview1);
myList.setAdapter(addNumberBaseAdpater);
}
}
AddNumberBaseAdpater代码:
package com.example.listviewasitem;
import java.util.ArrayList;
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
public class AddNumberBaseAdpater extends BaseAdapter {
private LayoutInflater mInflater;
private ArrayList<String> text;
int tindex = 0;
String temp;
int sp;
public AddNumberBaseAdpater(Context context) {
text = new ArrayList<String>();
text.add("第1个自定义控件条目");// 默认只加载1个Item
this.mInflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return text.size();
}
public Object getItem(int position) {
return text.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// final ViewHolder holder = new ViewHolder();
final ViewHolder holder;// 新建holder一定要放在if内
if (convertView == null) {
holder = new ViewHolder();// 新建holder一定要放在if内
convertView = mInflater.inflate(R.layout.addnumber, null);
holder.btnOpen = (ImageButton) convertView
.findViewById(R.id.ibtnAddNumber);
holder.editText = (EditText) convertView
.findViewById(R.id.editNumber);
convertView.setTag(holder);
} else {
// Log.d("getView","getView called convertView !== null ");
holder = (ViewHolder) convertView.getTag();
}
// ////////////////////////////////////////////////////////////////////////////
switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个
case 0:
holder.btnOpen
.setBackgroundResource(android.R.drawable.ic_input_add);// 第一项按钮则显示加号图片
// holder.editText.setText(text.get(tindex));
break;
default:
holder.btnOpen.setBackgroundResource(android.R.drawable.ic_delete);// 超过了一项则显示减号图片,可以删除
break;
}
holder.editText.setText(text.get(position));
holder.ref = position;
// //////////////////////////////////////////////////////////////////////////////
//添加EditText文本输入并保存到text.
holder.editText
.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
holder.editText.getText();
text.remove(position);
text.add(position, holder.editText.getText().toString());
}
});
holder.btnOpen.setOnClickListener(new View.OnClickListener() {// 添加按钮
public void onClick(View v) {
if (position == 0) {
// text.add("xxx");// 添加一项控件
tindex = tindex + 1;
text.add("第" + String.valueOf(tindex + 1)
+ "自定义控件条目:");// 添加一项控件
} else if (position > 0) {// 始终留一项不能删除
text.remove(position);// 删除选定按钮
// text.remove(text.size() - 1);// 删除最后一个按钮
tindex = tindex - 1;
}
notifyDataSetChanged();
}
});
return convertView;
}
private class ViewHolder {
public EditText editText;
public ImageButton btnOpen;
int ref;
}
}
布局文件比较简单,就不传了。原代码下载地址:http://download.csdn.net/detail/xiaozenbin/9747532
相关文章推荐
- Android动态创建ListView视图,动态增加和删除Item.
- 安卓重要组件#4--动态的增加和删除listView中的内容
- c# winForm TableLayoutPanel学习 合并行的布局及动态增加删除内部控件
- javascript动态增加、删除、填充表格内容
- 为ListView增加Header (可动态修改其中的内容)
- JS动态增加删除UL节点LI及相关内容
- 自定义SwipeLayout控件实现ListView条目侧滑出现删除按钮,点击实现删除ListView条目
- 动态增加和删除多个web用户控件
- javascript动态增加、删除、填充表格内容
- jquery动态增加text 元素以及删除文本内容
- 动态增加和删除用户控件
- javascript动态增加、删除、填充表格内容
- JS动态增加删除UL节点LI及相关内容
- 为 ListView 控件增加动态编辑功能
- asp.net 动态删除、增加上传控件——{超好}
- 【Unity】自制ListView动态增加与删除
- javascript动态增加、删除、填充表格内容
- 动态删除列表试图(ListView)的内容
- 动态增加和删除多个web用户控件