总结listview动态添加与删除行

这是用adapter来实现操作:

要实现添加按钮的操作,必须自定义Adapter,使用Button View的setTag()方法,将Button所属的位置设置到tag当中
要实现动态添加删除ItemView的操作,必须首先调整调整Adapter所绑定的数据源,然后调用Adapter的notifyDataSetChanged()方法

以下为实现的一个实例出自:http://disanji.net/2010/12/22/android-listview-itemview/

package com.jason.joysmsyd;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class SendMain extends ListActivity implements OnClickListener{
 
	Button buttonMessage,buttonContact,buttonHistory;
	EditText textMessage;
 
	List<Map<String,String>> contacts = new ArrayList<Map<String,String>>();
 
 
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
 
		this.setContentView(R.layout.layout_send);
 
		buttonMessage = (Button) this.findViewById(R.id.ButtonMessage);
		buttonContact = (Button) this.findViewById(R.id.ButtonContact);
		buttonHistory = (Button) this.findViewById(R.id.ButtonHistory);
 
		textMessage = (EditText)this.findViewById(R.id.EditTextMessage);
		textMessage.setText(this.getIntent().getExtras().getString("message"));
 
	}
 
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.ButtonMessage:
			this.finish();
			break;
		case R.id.ButtonContact:
		{
			Intent intent = new Intent();
			intent.setAction("com.jason.action.contact");
			this.startActivityForResult(intent, 0);
		}
			break;
		case R.id.ButtonHistory:
		{
			Intent intent = new Intent();
			intent.setAction("com.jason.action.history");
			this.startActivityForResult(intent, 1);
		}
			break;
		}
 
	}
 
 
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		 if (requestCode == 0 && resultCode == RESULT_OK) {
			this.getcontactFromString(data.getExtras().getString(
					UserSelectActivity.RETURN_LIST));
			bindDataToList();
		}
	}
 
	private void getcontactFromString(String data) {
		if (data == null || data.length() == 0) {
			return;
		}
 
 
		String[] arrayContact = data.split("#");
		for (String singleContact : arrayContact) {
			if (singleContact != null && singleContact.length() > 0) {
				String[] props = singleContact.split(":");
				if (props.length == 2) {
					Map<String,String> contact = new HashMap<String,String>();
					contact.put("name", props[0]);
					contact.put("phone", props[1]);
					contacts.add(contact);
 
				}
			}
 
		}
 
	}
 
	private void bindDataToList(){
		this.setListAdapter(new MyAdapter());
	}
 
	public class MyAdapter extends BaseAdapter{
 
		public int getCount() {
			// TODO Auto-generated method stub
			return contacts.size();
		}
 
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return contacts.get(position);
		}
 
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}
 
 
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			LayoutInflater inflater = SendMain.this.getLayoutInflater();
			 final View view = inflater.inflate(R.layout.layout_user_item, null);
			 final TextView textPhone = (TextView) view.findViewById(R.id.text1);
			 final TextView textName = (TextView) view.findViewById(R.id.text2);
			 Button button = (Button)view.findViewById(R.id.buttonDelete);
 
			 textPhone.setText(contacts.get(position).get("phone"));
			 textName.setText(contacts.get(position).get("name"));
 
			 button.setTag( position);
 
			 button.setOnClickListener(new OnClickListener(){
 
				public void onClick(View v) {
					// TODO Auto-generated method stub
					int position = Integer.parseInt(v.getTag().toString());
					contacts.remove(position);
					MyAdapter.this.notifyDataSetChanged();
 
//					SendMain.this.getListView().refreshDrawableState();
				}});
 
			return view;



这是用listview控件来实现::http://blog.sina.com.cn/s/blog_7cb402b00100ymyt.html和http://topic.csdn.net/u/20100818/13/7A71C6D3-DD67-461C-ACA7-D2461A81A670.html和http://www.eoeandroid.com/thread-63576-1-1.html

    listItem = new ArrayList<HashMap<String, Object>>();
    listItemAdapter = new SimpleAdapter(this, listItem, R.layout.mylayout,
    new String[]{"image", "title", "text"},
    new int[]{R.id.ItemImage, R.id.ItemTitle, R.id.ItemText});
    myList = (ListView)findViewById(R.id.TaxiList);
    myList.setAdapter(listItemAdapter);

    private void addItem()
    {
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("image", R.drawable.icon);
    map.put("title", "标题");
    map.put("text", "要显示的内容");
    listItem.add(map);
    listItemAdapter.notifyDataSetChanged();
    }
    private void deleteItem()
    {
    int size = listItem.size();
    if( size > 0 )
    {
    listItem.remove(listItem.size() - 1);
    listItemAdapter.notifyDataSetChanged();
    }
    }

private List<HashMap<String, String>> fillMaps=null

  public void onItemClick(AdapterView<?> parent, View view,   
  int position, long id) {
  Log.d("----", position + "");   
  Log.d("----",id+"");  
  selectPosition = position;
  v = view;
  AlertDialog.Builder builder=new AlertDialog.Builder(Test3.this);
  builder.setMessage("真的要删除该记录吗?").
  setPositiveButton("是",new DialogInterface.OnClickListener(){
  public void onClick(DialogInterface dialog,int which){
[color=#FF0000]
  // here will use the added member .
   fillMaps.remove(selectPosition);
   adapter.notifyDataSetChanged();
[/color]

}
  }).
  setNegativeButton("否",new DialogInterface.OnClickListener(){
  public void onClick(DialogInterface dialog,int which){
// myTV.setText("取消删除!");
  }
  });
  AlertDialog ad=builder.create();
  ad.show();  
    
  }});



你可能感兴趣的:(总结listview动态添加与删除行)