| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package com.hjq.dialog;
- import android.app.Dialog;
- import android.content.Context;
- import android.support.annotation.NonNull;
- import android.support.v4.app.FragmentActivity;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.Gravity;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- import com.hjq.base.BaseDialog;
- import com.hjq.base.BaseDialogFragment;
- import com.hjq.base.BaseRecyclerViewAdapter;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- /**
- * desc : 菜单选择框
- */
- public final class MenuDialog {
- public static final class Builder
- extends BaseDialogFragment.Builder<Builder>
- implements View.OnClickListener,
- BaseRecyclerViewAdapter.OnItemClickListener {
- private OnListener mListener;
- private boolean mAutoDismiss = true;
- private RecyclerView mRecyclerView;
- private MenuAdapter mAdapter;
- private TextView mCancelView;
- public Builder(FragmentActivity activity) {
- super(activity);
- setContentView(R.layout.dialog_menu);
- setAnimStyle(BaseDialog.AnimStyle.BOTTOM);
- setGravity(Gravity.BOTTOM);
- setWidth(MATCH_PARENT);
- mRecyclerView = findViewById(R.id.rv_dialog_menu_list);
- mCancelView = findViewById(R.id.tv_dialog_menu_cancel);
- mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
- mAdapter = new MenuAdapter(getContext());
- mAdapter.setOnItemClickListener(this);
- mRecyclerView.setAdapter(mAdapter);
- mCancelView.setOnClickListener(this);
- }
- public Builder setList(int... resIds) {
- List<String> data = new ArrayList<>(resIds.length);
- for (int resId : resIds) {
- data.add(getString(resId));
- }
- return setList(data);
- }
- public Builder setList(String... data) {
- return setList(Arrays.asList(data));
- }
- public Builder setList(List<String> data) {
- mAdapter.setData(data);
- return this;
- }
- public Builder setCancel(int resId) {
- return setCancel(getText(resId));
- }
- public Builder setCancel(CharSequence text) {
- mCancelView.setText(text);
- mCancelView.setVisibility((text == null || "".equals(text.toString())) ? View.GONE : View.VISIBLE);
- return this;
- }
- public Builder setAutoDismiss(boolean dismiss) {
- mAutoDismiss = dismiss;
- return this;
- }
- public Builder setListener(OnListener l) {
- mListener = l;
- return this;
- }
- /**
- * {@link View.OnClickListener}
- */
- @Override
- public void onClick(View v) {
- if (mAutoDismiss) {
- dismiss();
- }
- if (v == mCancelView) {
- if (mListener != null) {
- mListener.onCancel(getDialog());
- }
- }
- }
- /**
- * {@link BaseRecyclerViewAdapter.OnItemClickListener}
- */
- @Override
- public void onItemClick(RecyclerView recyclerView, View itemView, int position) {
- if (mAutoDismiss) {
- dismiss();
- }
- if (mListener != null) {
- mListener.onSelected(getDialog(), position, mAdapter.getItem(position));
- }
- }
- // @Override
- // protected BaseDialog createDialog(Context context, int themeResId) {
- // if (getGravity() == Gravity.BOTTOM) {
- // return new BaseBottomDialog(context, themeResId);
- // }
- // return super.createDialog(context, themeResId);
- // }
- }
- private static final class MenuAdapter extends BaseRecyclerViewAdapter<String, MenuAdapter.ViewHolder> {
- private MenuAdapter(Context context) {
- super(context);
- }
- @NonNull
- @Override
- public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return new ViewHolder(parent, R.layout.item_dialog_menu);
- }
- @Override
- public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
- holder.mTextView.setText(getItem(position));
- if (position == 0) {
- // 当前是否只有一个条目
- if (getItemCount() == 1) {
- holder.itemView.setBackgroundResource(R.drawable.dialog_menu_item);
- holder.mView.setVisibility(View.GONE);
- }else {
- holder.itemView.setBackgroundResource(R.drawable.dialog_menu_item_top);
- holder.mView.setVisibility(View.VISIBLE);
- }
- }else if (position == getItemCount() - 1) {
- holder.itemView.setBackgroundResource(R.drawable.dialog_menu_item_bottom);
- holder.mView.setVisibility(View.GONE);
- }else {
- holder.itemView.setBackgroundResource(R.drawable.dialog_menu_item_middle);
- holder.mView.setVisibility(View.VISIBLE);
- }
- }
- final class ViewHolder extends BaseRecyclerViewAdapter.ViewHolder {
- private TextView mTextView;
- private View mView;
- private ViewHolder(ViewGroup parent, int layoutId) {
- super(parent, layoutId);
- mTextView = (TextView) findViewById(R.id.tv_dialog_menu_name);
- mView = findViewById(R.id.v_dialog_menu_line);
- }
- }
- }
- public interface OnListener {
- /**
- * 选择条目时回调
- */
- void onSelected(Dialog dialog, int position, String text);
- /**
- * 点击取消时回调
- */
- void onCancel(Dialog dialog);
- }
- }
|