【android】ListView 中添加按钮,动态删除添加ItemView的操作

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;
        }
         
    }
}
原文地址:https://www.cnblogs.com/549294286/p/2643905.html