创建自定义的List对话框

android自定义对话框,带列表。

上代码:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:id="@+id/show_dlg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="测试自定义对话框"/>
</LinearLayout>


Activity代码

package com.example;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MyActivity extends Activity  implements View.OnClickListener 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button)findViewById(R.id.show_dlg)).setOnClickListener(this);
    }


    public void onClick(View view) {
        //To change body of implemented methods use File | Settings | File Templates.
        switch (view.getId()) {
            case R.id.show_dlg:
                showDialog(DLG_OPEN_BOX);
                break;
            default:
                break;
        }
    }

        @Override
    protected Dialog onCreateDialog(int id) {
        AggBoxShowResultDlg dlg = null;
        switch (id) {
            case DLG_OPEN_BOX:
                dlg = new AggBoxShowResultDlg(this);
                break;
            default:
                break;
        }

        return dlg;
    }

    private final int DLG_OPEN_BOX = 1;
}

Activity代码也可以这样:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MyActivity extends Activity implements View.OnClickListener {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button) findViewById(R.id.show_dlg)).setOnClickListener(this);
    }


    public void onClick(View view) {
        //To change body of implemented methods use File | Settings | File Templates.
        switch (view.getId()) {
            case R.id.show_dlg:
                AggBoxShowResultDlg dlg = new AggBoxShowResultDlg(this);
                dlg.show();
//                showDialog(DLG_OPEN_BOX);
                break;
            default:
                break;
        }
    }

//    @Override
//    protected Dialog onCreateDialog(int id) {
//        AggBoxShowResultDlg dlg = null;
//        switch (id) {
//            case DLG_OPEN_BOX:
//                dlg = new AggBoxShowResultDlg(this);
//                break;
//            default:
//                break;
//        }
//
//        return dlg;
//    }
//
//    private final int DLG_OPEN_BOX = 1;
}


对话框配置文件agg_box_open_dlg.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#00000000">
    <ImageView android:id="@+id/img_box_open_dlg"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:background="#00000000"
               android:layout_alignParentLeft="true"
               android:layout_centerVertical="true"/>
    <TextView android:id="@+id/text_box_open_dlg"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="无介绍"
              android:layout_toRightOf="@id/img_box_open_dlg"
              android:layout_centerVertical="true"/>
</RelativeLayout>

对话框代码:

package com.example;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;

import java.util.ArrayList;

/**
 * Created by IntelliJ IDEA.
 * User: wulong
 * Date: 11-12-14
 * Time: 上午9:38
 * To change this template use File | Settings | File Templates.
 */
public class AggBoxShowResultDlg extends AlertDialog {
    private static final String TAG = "Quwei.AggBoxShowResultDlg";
    private final Context mContex;


    ListView mListView = null;
    MyListAdapter myAdapter = null;
    ArrayList<AggElem> mItem = new ArrayList<AggElem>();

    class AggElem{
        public int img;
        public String txt;
        
        AggElem(int img,String txt){
            this.img = img;
            this.txt = txt;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //此处仅一个简单的TextView,可以扩展到自定义xml里面

        //测试数据
        for (int i = 0; i < 20; i++) {
            AggElem item = new AggElem(R.drawable.meinv,"文字显示"+i);
            mItem.add(item);
        }

        mListView = new ListView(mContex);
        myAdapter = new MyListAdapter(mContex, R.layout.agg_box_open_dlg, mItem);
        mListView.setAdapter(myAdapter);

        setView(mListView);

        setTitle("标题栏");
        setIcon(R.drawable.meinv);
        setButton("确定可以",new OnClickListener() {
            public void onClick(DialogInterface dialogInterface, int i) {
                //To change body of implemented methods use File | Settings | File Templates.
                Log.d(TAG, "onClick");
            }
        });

        super.onCreate(savedInstanceState);
    }

    public AggBoxShowResultDlg(Context context) {
        super(context);
        mContex = context;
    }


    public class MyListAdapter extends ArrayAdapter<Object> {

        public final class GhostHolder {
            public ImageView avatar;
            public TextView text;
        }

        int mTextViewResourceID = 0;
        private Context mContext;
        private ArrayList<AggElem> mItemArray = null;

        public MyListAdapter(Context context, int textViewResourceId, ArrayList<AggElem> contentArray) {
            super(context, textViewResourceId);
            mTextViewResourceID = textViewResourceId;
            mContext = context;
            int count = contentArray.size();
            if (null != contentArray) {
                mItemArray = contentArray;
            } else {
                mItemArray = new ArrayList<AggElem>();
            }
        }

        public int getCount() {
            int count = mItemArray.size();
            return count;
        }

        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(final int position, View convertView, ViewGroup parent) {
            GhostHolder holder = null;

            if (convertView == null) {
                holder = new GhostHolder();

                convertView = LayoutInflater.from(mContext).inflate(
                        mTextViewResourceID, null);
                holder.avatar = (ImageView) convertView.findViewById(R.id.img_box_open_dlg);
                holder.text = (TextView) convertView.findViewById(R.id.text_box_open_dlg);

                convertView.setTag(holder);

            } else {
                holder = (GhostHolder) convertView.getTag();
            }

            holder.avatar.setImageResource(mItemArray.get(position).img);
            holder.text.setText("介绍:" + mItemArray.get(position).txt);

            return convertView;
        }
    }

}

结果:



要在Android应用程序中创建自定义单选列表对话框,您可以遵循以下步骤: 1. 创建一个布局文件来定义对话框的外观和感觉。在布局文件中包含一个ListView,它将用于显示选项列表。 2. 创建一个自定义适配器来填充ListView。您可以使用ArrayAdapter或BaseAdapter来实现适配器。 3. 创建一个AlertDialog.Builder对象并将其传递给布局文件。设置标题,消息和积极按钮。 4. 将ListView添加到对话框中并设置其适配器。 5. 为ListView设置一个OnItemClickListener,以便在用户选择一个选项时触发相应的操作。 下面是一个简单的示例代码,其中包含用于创建自定义单选列表对话框的关键步骤: ``` // 定义选项列表 final String[] items = {"Option 1", "Option 2", "Option 3"}; // 创建适配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, items); // 创建对话框 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select an option"); builder.setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // 处理用户选择 } }); // 显示对话框 builder.show(); ``` 在这个例子中,我们创建了一个包含三个选项的列表,然后使用ArrayAdapter创建适配器。接下来,我们使用AlertDialog.Builder创建对话框,并将适配器传递给setSingleChoiceItems方法。最后,我们显示对话框并处理用户选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值