zoukankan      html  css  js  c++  java
  • 【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;
            }
             
        }
    }
  • 相关阅读:
    The bean 'xxx' could not be injected as a 'xxx'because it is a JDK dynamic proxy that implements
    JQuery对象选择详细说明
    C#将image中的显示的图片转换成二进制
    选择一个图片文件,并且用PictureBox表示在Form上
    Android推送方案分析(MQTT/XMPP/GCM)
    [转载]什么是 Design Hackathon?
    脚本启动MySql服务
    Mysql数据库插入数据乱码问题,解决方案!
    MySQL自动备份脚本
    读取Excel模板,写入数据,并别输出另存为Excel文件
  • 原文地址:https://www.cnblogs.com/549294286/p/2643905.html
Copyright © 2011-2022 走看看