package com.netease.nim.uikit.common.ui.dialog; import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.util.Pair; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.netease.nim.uikit.R; import com.netease.nim.uikit.common.adapter.TAdapter; import com.netease.nim.uikit.common.adapter.TAdapterDelegate; import com.netease.nim.uikit.common.adapter.TViewHolder; import com.netease.nim.uikit.common.util.sys.ScreenUtil; import java.util.LinkedList; import java.util.List; public class CustomAlertDialog extends AlertDialog { private Context context; private int itemSize = 0; private View titleView; private TextView titleTextView; private ImageButton titleBtn; private ListView listView; private boolean isTitleVisible = false; private boolean isTitleBtnVisible = false; private String title; private View.OnClickListener titleListener = null; private List<Pair<String, Integer>> itemTextList = new LinkedList<Pair<String, Integer>>(); private List<onSeparateItemClickListener> itemListenerList = new LinkedList<onSeparateItemClickListener>(); private OnClickListener listListener; private BaseAdapter listAdapter; private OnItemClickListener itemListener; private int defaultColor = R.color.color_black_333333; public CustomAlertDialog(Context context) { super(context, R.style.dialog_default_style); this.context = context; initAdapter(); } public CustomAlertDialog(Context context, int itemSize) { super(context, R.style.dialog_default_style); this.context = context; this.itemSize = itemSize; } private void initAdapter() { listAdapter = new TAdapter(context, itemTextList, new TAdapterDelegate() { @Override public int getViewTypeCount() { return itemTextList.size(); } @Override public Class<? extends TViewHolder> viewHolderAtPosition(int position) { return CustomDialogViewHolder.class; } @Override public boolean enabled(int position) { return true; } }); itemListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { itemListenerList.get(position).onClick(); dismiss(); } }; } public void setAdapter(final BaseAdapter adapter, final OnClickListener listener) { listAdapter = adapter; listListener = listener; itemListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { dismiss(); listListener.onClick(CustomAlertDialog.this, position); } }; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nim_easy_alert_dialog_with_listview); LinearLayout root = (LinearLayout) findViewById(R.id.easy_alert_dialog_layout); ViewGroup.LayoutParams params = root.getLayoutParams(); params.width = (int) ScreenUtil.getDialogWidth(); root.setLayoutParams(params); titleView = findViewById(R.id.easy_dialog_title_view); if (titleView != null) { setTitleVisible(isTitleVisible); } titleTextView = (TextView) findViewById(R.id.easy_dialog_title_text_view); if (titleTextView != null) { setTitle(title); } titleBtn = (ImageButton) findViewById(R.id.easy_dialog_title_button); if (titleBtn != null) { setTitleBtnVisible(isTitleBtnVisible); setTitleBtnListener(titleListener); } listView = (ListView) findViewById(R.id.easy_dialog_list_view); if (itemSize > 0) { updateListView(); } } public void setTitle(String title) { this.title = title; isTitleVisible = TextUtils.isEmpty(title) ? false : true; setTitleVisible(isTitleVisible); if (isTitleVisible && titleTextView != null) { titleTextView.setText(title); } } public void setTitle(int resId) { this.title = context.getString(resId); isTitleVisible = TextUtils.isEmpty(title) ? false : true; setTitleVisible(isTitleVisible); if (isTitleVisible && titleTextView != null) { titleTextView.setText(title); } } public void setTitleVisible(boolean visible) { isTitleVisible = visible; if (titleView != null) { titleView.setVisibility(isTitleVisible ? View.VISIBLE : View.GONE); } } public void setTitleBtnVisible(boolean visible) { isTitleBtnVisible = visible; if (titleBtn != null) { titleBtn.setVisibility(isTitleBtnVisible ? View.VISIBLE : View.GONE); } } public void setTitleBtnListener(View.OnClickListener titleListener) { this.titleListener = titleListener; if (titleListener != null && titleBtn != null) { titleBtn.setOnClickListener(titleListener); } } public void addItem(String itemText, onSeparateItemClickListener listener) { addItem(itemText, defaultColor, listener); } public void addItem(String itemText, int color, onSeparateItemClickListener listener) { itemTextList.add(new Pair<String, Integer>(itemText, color)); itemListenerList.add(listener); itemSize = itemTextList.size(); } public void addItem(int resId, onSeparateItemClickListener listener) { addItem(context.getString(resId), listener); } public void addItem(int resId, int color, onSeparateItemClickListener listener) { addItem(context.getString(resId), color, listener); } public void addItemAfterAnother(String itemText, String another, onSeparateItemClickListener listener) { int index = itemTextList.indexOf(another); itemTextList.add(index + 1, new Pair<String, Integer>(itemText, defaultColor)); itemListenerList.add(index + 1, listener); itemSize = itemTextList.size(); } public void clearData() { itemTextList.clear(); itemListenerList.clear(); itemSize = 0; } private void updateListView() { listAdapter.notifyDataSetChanged(); if (listView != null) { listView.setAdapter(listAdapter); listView.setOnItemClickListener(itemListener); } } public interface onSeparateItemClickListener { void onClick(); } @Override public void show() { if (itemSize <= 0) { return; } updateListView(); super.show(); } }