package com.likebamboo.osa.android.ui.fragments; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.entity.LDialogItem; import com.likebamboo.osa.android.ui.adapter.BaseAdapter; import java.util.ArrayList; /** * ListView对话框 * * @author likebamboo * @version [版本号, 2015-06-15] * @see [相关类/方法] * @since [产品/模块版本] */ public class SimpleListDialog<T extends LDialogItem> extends DialogFragment { /** * 标题 */ public static final String EXTRA_LIST_DIALOG_TITLE = "extra_list_dialog_title"; /** * 标题 */ public static final String EXTRA_LIST_DIALOG_DATAS = "extra_list_dialog_datas"; /** * 根布局 */ private View root = null; /** * 标题,信息, */ private String title = ""; /** * ListView数据源 */ private ArrayList<T> mDatas = null; /** * 监听器 */ private OnDialogItemClickListener<T> mListener = null; /** * 适配器 */ private ListDialogAdapter<T> mAdapter = null; public interface OnDialogItemClickListener<T extends LDialogItem> { void onItemClick(T obj); } public static SimpleListDialog getInstance(String title, ArrayList<? extends LDialogItem> datas) { SimpleListDialog fragment = new SimpleListDialog(); Bundle bundle = new Bundle(); bundle.putString(EXTRA_LIST_DIALOG_TITLE, title); bundle.putParcelableArrayList(EXTRA_LIST_DIALOG_DATAS, datas); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { title = getArguments().getString(EXTRA_LIST_DIALOG_TITLE); try { mDatas = getArguments().getParcelableArrayList(EXTRA_LIST_DIALOG_DATAS); } catch (Exception e) { e.printStackTrace(); } } } /** * @param mListener * @see [类、类#方法、类#成员] */ public void setOnItemClickListener(OnDialogItemClickListener<T> mListener) { this.mListener = mListener; } /** * 刷新数据 */ public void notifyDataChanged() { if (mAdapter == null) { mAdapter.notifyDataSetChanged(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (root == null) { root = View.inflate(getActivity(), R.layout.simple_list_dialog, null); } // 缓存的rootView需要判断是否已经被加过parent, // 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。 ViewGroup parent = (ViewGroup) root.getParent(); if (parent != null) { parent.removeView(root); } TextView titleTv = (TextView) root.findViewById(R.id.simple_list_dialog_title); ListView listView = (ListView) root.findViewById(R.id.simple_list_dialog_list); // 设置ListView数据源 mAdapter = new ListDialogAdapter<T>(getActivity(), mDatas); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Object item = arg0.getItemAtPosition(arg2); if (item != null && item instanceof LDialogItem) { if (mListener != null) { mListener.onItemClick((T) item); } } SimpleListDialog.this.dismiss(); } }); // 标题 if (TextUtils.isEmpty(title)) { titleTv.setVisibility(View.GONE); } else { titleTv.setText(title); } return root; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Dialog dialog = new Dialog(getActivity(), R.style.simple_dialog_style); Window window = dialog.getWindow(); //设置显示动画 window.setWindowAnimations(R.style.DialogSlideAnimation); dialog.setCanceledOnTouchOutside(true); return dialog; } @Override public void onDestroy() { super.onDestroy(); } /** * listView dialog适配器 * * @author wentaoli * @version [版本号, 2014年12月25日] * @see [相关类/方法] * @since [产品/模块版本] */ private static class ListDialogAdapter<T extends LDialogItem> extends BaseAdapter<T> { public ListDialogAdapter(Context ctx, ArrayList<T> datas) { super(ctx, datas); } @Override public View getView(int position, View v, ViewGroup parent) { ViewHolder holder; if (v == null) { holder = new ViewHolder(); v = LayoutInflater.from(mContext).inflate(R.layout.item_simple_list_dialog, null); holder.iconIv = v.findViewById(R.id.simple_dialog_item_icon_tv); holder.titleTv = (TextView) v.findViewById(R.id.simple_dialog_item_name_tv); v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); } LDialogItem item = getItem(position); if (item == null) { return v; } if (item.isSelected()) { holder.iconIv.setVisibility(View.VISIBLE); } else { holder.iconIv.setVisibility(View.INVISIBLE); } holder.titleTv.setText(item.getName()); return v; } } private static class ViewHolder { View iconIv; TextView titleTv; } }