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)

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM