package com.classic.car.ui.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import com.classic.adapter.BaseAdapterHelper; import com.classic.adapter.CommonAdapter; import com.classic.car.R; import java.lang.ref.WeakReference; import java.util.List; public class YearsPopup extends RelativePopupWindow implements AdapterView.OnItemClickListener{ private @VerticalPosition int mVerticalPosition; private @HorizontalPosition int mHorizontalPosition; private WeakReference<Context> mContext; private List<Integer> mYears; private Listener mListener; private boolean mFitInScreen; private YearsPopup(Builder builder) { mVerticalPosition = builder.verticalPosition; mHorizontalPosition = builder.horizontalPosition; mYears = builder.years; mContext = builder.context; mFitInScreen = builder.fitInScreen; mListener = builder.listener; init(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (null != mListener) { mListener.onYearSelected(mYears.get(position)); dismiss(); } } public interface Listener { void onYearSelected(int year); } public void show(@NonNull View view) { if (null == mContext || null == mContext.get()) { return; } showOnAnchor(view, mVerticalPosition, mHorizontalPosition, mFitInScreen); } private void init() { if (null == mContext || null == mContext.get()) { return; } @SuppressLint("InflateParams") View view = LayoutInflater.from(mContext.get()).inflate(R.layout.popup_years, null); setContentView(view); setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); setFocusable(true); setOutsideTouchable(true); setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); ListView lv = (ListView)view.findViewById(R.id.popup_lv); lv.setOnItemClickListener(this); lv.setAdapter(new CommonAdapter<Integer>(mContext.get(), R.layout.popup_years_item, mYears) { @Override public void onUpdate(BaseAdapterHelper helper, Integer item, int position) { helper.setText(R.id.year, String.valueOf(item)); } }); } public static final class Builder { private int verticalPosition; private int horizontalPosition; private List<Integer> years; private boolean fitInScreen; private Listener listener; private WeakReference<Context> context; public Builder() {} public Builder verticalPosition(int verticalPosition) { this.verticalPosition = verticalPosition; return this; } public Builder horizontalPosition(int horizontalPosition) { this.horizontalPosition = horizontalPosition; return this; } public Builder years(List<Integer> years) { this.years = years; return this; } public Builder context(Context context) { this.context = new WeakReference<>(context); return this; } public Builder fitInScreen(boolean fitInScreen) { this.fitInScreen = fitInScreen; return this; } public Builder listener(Listener listener) { this.listener = listener; return this; } public YearsPopup build() { return new YearsPopup(this); } } }