1、要实现添加按钮的操作,必须自定义Adapter,使用Button View的setTag()方法,将Button所属的位置设置到tag当中
2、要实现动态添加删除ItemView的操作,必须首先调整调整Adapter所绑定的数据源,然后调用Adapter的notifyDataSetChanged()方法
3、在adapter中,View的事件不能显示得对View本身操作,例如:
listView.addBnt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //配合上面的setTag,可以使用v来操纵控件,而不必用listView.addBnt, //如果要在事件中操纵listView.addBnt,要求必须是final的 //可以利用poi删除mchannelList对应的元素,然后adapter notify,然后listView刷新,可以隐藏选中的item int poi = Integer.parseInt(v.getTag().toString()); Channel channel = mchannelList.get(poi); DBUtil.insertChannel(mcontext, channel); Button bnt = (Button)v; bnt.setText("已添"); bnt.setTextColor(R.color.black); bnt.setClickable(false); new AlertDialog.Builder(mcontext).setTitle("Info") .setMessage("添加成功").setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Task task = new Task(Task.TASK_CHANNEL_LIST, null); MainService.allTask.add(task); Log.i(TAG, "onClick:add a task - TAST_CHANNEL_LIST"); } }).create().show(); } });
不能对listView.addBnt操作,若要强行操作,要求是final类型,这是不可能的。
例子:
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; } } }