• 【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;
            }
             
        }
    }
  • 相关阅读:
    网页加速的14条优化法则 网站开发与优化
    .NET在后置代码中输入JS提示语句(背景不会变白)
    C语言变量声明内存分配
    SQL Server Hosting Toolkit
    An established connection was aborted by the software in your host machine
    C语言程序设计 2009春季考试时间和地点
    C语言程序设计 函数递归调用示例
    让.Net 程序脱离.net framework框架运行
    C语言程序设计 答疑安排(2009春季 110周) 有变动
    软件测试技术,软件项目管理 实验时间安排 2009春季
  • 原文地址:https://www.cnblogs.com/549294286/p/2643905.html
Copyright © 2020-2023  润新知