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;
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);
}
}
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;
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;
private ArrayList<String> text;
int tindex = 0;
String temp;
int sp;
public AddNumberBaseAdpater(Context context) {
text = new ArrayList<String>();
text.add("第1个自定义控件条目");// 默认只加载1个Item
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();
}
// TODO Auto-generated method stub
return text.size();
}
public Object getItem(int position) {
return text.get(position);
}
return text.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// 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);
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();
}
// Log.d("getView","getView called convertView !== null ");
holder = (ViewHolder) convertView.getTag();
}
//
switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个
case 0:
switch (position) {// 不要以为XML文件中是2个按钮,其实只有一个
case 0:
holder.btnOpen
.setBackgroundResource(android.R.drawable.ic_input_add);// 第一项按钮则显示加号图片
// holder.editText.setText(text.get(tindex));
.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() {
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());
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)
+ "自定义控件条目:");// 添加一项控件
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;
}
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;
}
}
public EditText editText;
public ImageButton btnOpen;
int ref;
}
}
布局文件比较简单,就不传了。原代码下载地址:http://download.csdn.net/detail/xiaozenbin/9747532