您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: