DialogFragment

来源:互联网 发布:falcon猎鹰手表知乎 编辑:程序博客网 时间:2024/05/19 04:29
import android.annotation.TargetApi;
import android.app.Dialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;


import com.kocla.marketresource.R;


/**
 * 1.
 * final V4ListDialogFragment.OnItemClickListener itemClickListener = new V4ListDialogFragment.OnItemClickListener() {
 *
 * @author admin
 * @Override public void onItemClick(int position) {
 * Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_LONG).show();
 * }
 * };
 * 2.
 * if(dialogFragment == null){
 *  dialogFragment = new V4ListDialogFragment(data,itemClickListener);

 * }

 * dialogFragment.show();

 * <p/>
 * 参考:http://blog.csdn.net/lmj623565791/article/details/37815413/
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class V4ListDialogFragment extends android.support.v4.app.DialogFragment {
    LayoutInflater inflater;


    public V4ListDialogFragment() {
    }


    public V4ListDialogFragment(String[] data,OnItemClickListener onItemClickListener) {
        Bundle bundle = new Bundle();
        bundle.putStringArray("data", data);
        setArguments(bundle);
        this.onItemClickListener = onItemClickListener;
    }


    ListView lv_dialog;
    private OnItemClickListener onItemClickListener;


    public OnItemClickListener getOnItemClickListener() {
        return onItemClickListener;
    }


    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }


    public interface OnItemClickListener {
        public AdapterView<?> parent = null;
        public View view = null;
        public int position = -1;
        public long id = 0;


        public void onItemClick(int position);


        /**
         * @param parent 长按parent(ListView) 弹出 V4ListDialogFragment,
         * @param view 对应ListView,不是V4ListDialogFragment的listview
         * @param position 对应ListView,不是V4ListDialogFragment的listview
         * @param id 对应ListView,不是V4ListDialogFragment的listview
         */
        //public void onItemClick(AdapterView<?> parent, View view, int position, long id,int clickItem) ;
    }


    /**
     * setStyle(),可以自定义样式
     * @param savedInstanceState
     */
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setStyle(STYLE_NO_TITLE,R.style.custdialog);
    }


    /**
     * 覆写Fragment类的onCreateView方法,在DialogFragment的show方法执行之后, 系统会调用这个回调方法。
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        this.inflater = inflater;
        View view = inflater.inflate(R.layout.dialog_fragment_list, container,false);
        lv_dialog = (ListView) view.findViewById(R.id.lv_dialog);
        String[] data = getArguments().getStringArray("data");
        ListAdapter adapter = new ListAdapter(data);
        lv_dialog.setAdapter(adapter);
        //if(lv_dialog.getOnItemLongClickListener()==null){
        lv_dialog.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (onItemClickListener != null) {
                    //onItemClickListener.onItemClick(onItemClickListener.parent,onItemClickListener.view,onItemClickListener.position,onItemClickListener.id,position);
                    onItemClickListener.onItemClick(position);
                }
                dismiss();
            }
        });
        //}
        Log.i("XXX", "onCreateView后调用");
        return view;
    }


    /**
     * 覆写Fragment类的onCreateDialog方法,在DialogFragment的show方法执行之后, 系统会调用这个回调方法。
     */
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Dialog dialog = new Dialog(getActivity(),getTheme());
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        WindowManager.LayoutParams params =  dialog.getWindow().getAttributes();
        params.width =  200;
        dialog.getWindow().setAttributes(params);
        //STYLE_NO_TITLE
        //STYLE_NO_FRAME
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题
        //STYLE_NO_INPUT
        //dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        return dialog;
    }


    /**
     * DialogFragment   通过 xmL 是无法设置大小的
     * 经过测试 只能在 onResume 方法中,进行设置,代码如下:
     */
    public void onResume() {
        super.onResume();
        getDialog().getWindow().setLayout(750, WindowManager.LayoutParams.WRAP_CONTENT);
    }
    public void show() {
        //this.onItemClickListener = itemClickListener;
        Log.i("XXX", "show先调用");
        show(getFragmentManager(), V4ListDialogFragment.class.getSimpleName());
    }


    class ListAdapter extends BaseAdapter {
        String[] data;


        public ListAdapter(String[] data) {
            this.data = data;
        }


        @Override
        public int getCount() {
            return data == null ? 0 : data.length;
        }


        @Override
        public Object getItem(int position) {
            return data[position];
        }


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


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = inflater.inflate(R.layout.dialog_fragment_item, null);
                holder.tv_item = (TextView) convertView
                        .findViewById(R.id.dialog_item);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.tv_item.setText(data[position]);
            return convertView;
        }
    }


    static class ViewHolder {
        TextView tv_item;
    }
}
0 0