这是用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(); }});