ListView视图动态增加与删除控件条目,内容

来源:互联网 发布:intent传递数据 编辑:程序博客网 时间:2024/06/08 15:08

   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

0 0
原创粉丝点击