• android 点击button 弹出一个listview并且响应单击事件


    平时网上看到别人写的多是弹出一些基本控件。由于项目中用到的是弹出一个listView,所以就拿它来举例吧!

    由于使用Dialog建立的对话框必须要有标题,如果不调用它的setTitle()则标题区域会变成空白。所以如果不希望有标题哪怕是空白标题,就选择AlertDialog来创建自定义的对话框吧!

    上代码:

    一:首先,写一个布局文件。就一个按钮。并且设置它的监听事件:这个布局文件就略了。在它的监听事件里面声明一个方法,actionAlertDialog()

    btn.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    actionAlertDialog();
                }
            });

    二:其次,写第二个布局文件。这个文件就是要弹出的界面布局文件,命名为:myview.xml。如下:注意注意!给root命名了id:layout_myview.这个以后要用到!

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout_myview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        
    <ListView
            android:id="@+id/mylistview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:cacheColorHint="#ffffff"
            android:divider="#ffffff"
            android:dividerHeight="1dip"
            android:listSelector="#00000000" >
        </ListView>
        
    </LinearLayout>

    listview item项如下:命名为:item_listview

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffffff"
        android:orientation="horizontal" >
    
        <ImageView
            android:id="@+id/item_pic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
    
        <TextView
            android:id="@+id/item_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#003399"
            android:paddingRight="10dp"
            android:text="小宝" />
    
        <TextView
            android:id="@+id/item_birth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:textColor="#003399"
              android:paddingRight="10dp"
            android:text="2012-8-23" />
        
        <Button
            android:id="@+id/item_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点我" />
    
    </LinearLayout>

    三:给自定义的ListView写一个适配器,命名为MyAdapter,注意,列表里的按钮监听事件是加到了这里哦~

    /** @author Miya,2012-8-23,上午11:26:41,MyAlertDialog */
    package com.example.myalertdialog;
    
    import java.util.ArrayList;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MyAdapter extends BaseAdapter {
    
        Context context;
        ArrayList<Person> list;
        private LayoutInflater inflater;
        public MyAdapter(Context context,ArrayList list){
            this.context = context;
            this.list = list;
            inflater = LayoutInflater.from(context);
        }
        
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public Person getItem(int position) {
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            Holder holder;
            if(convertView==null){
                holder = new Holder();
                convertView = inflater.inflate(R.layout.item_listview, null);
                holder.name = (TextView) convertView.findViewById(R.id.item_name);
                holder.birth = (TextView) convertView.findViewById(R.id.item_birth);
                holder.itembtn = (Button) convertView.findViewById(R.id.item_btn);
                convertView.setTag(holder);
            }else{
                holder = (Holder) convertView.getTag();
            }
            holder.name.setText(list.get(position).name);
            holder.birth.setText(list.get(position).birth);
            holder.itembtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, list.get(position).name+"的生日是:"+list.get(position).birth, Toast.LENGTH_LONG).show();
                }
            });
            return convertView;
        }
    
        protected class Holder{
            TextView name;
            TextView birth;
            Button itembtn;
        }
    }

    四:万事俱备,只欠东风!
    我们要在actionAlertDialog()方法里面,实现我们的弹出效果。

      protected void actionAlertDialog(){
            ArrayList<Person> list = initData();
            AlertDialog.Builder builder;
            AlertDialog alertDialog;
    //        Context context = getApplicationContext();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
            View layout = inflater.inflate(R.layout.myview, (ViewGroup)findViewById(R.id.layout_myview));
            ListView myListView = (ListView) layout.findViewById(R.id.mylistview);
            MyAdapter adapter = new MyAdapter(context, list);
            myListView.setAdapter(adapter);
            builder = new AlertDialog.Builder(context);
            builder.setView(layout);
            alertDialog = builder.create();
            alertDialog.show();
            
        }
        
        protected ArrayList<Person> initData(){
            ArrayList<Person> list = new ArrayList<Person>();
            Person p;
            for(int i=0;i<10;i++){
                p = new Person();
                p.name = "小宝"+i;
                p.birth = "2012-8-23";
                list.add(p);
            }
            return list;
        }

    来看下效果吧!(丑了些,因为偶的主要目的是为了弹出自定义listView)

    //////////////////////////////////////////////////////////////////////////

  • 相关阅读:
    后缀自动机在复习
    冬令营模拟day2总结
    割点(模板)
    黑匣子
    挤牛奶
    上白泽慧音
    lca最小公共祖先祖先
    最小花费
    牛的旅行(标程)
    骑马修栅栏
  • 原文地址:https://www.cnblogs.com/miya2012/p/2652224.html
Copyright © 2020-2023  润新知