先看一下效果图:
首先添加工具类 MenuDetailPopup.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;
import com.drakeet.multitype.MultiTypeAdapter;
import com.yikelive.R;
import com.yikelive.binder.DiaLogDetailPopupBinder;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class MenuDetailPopup extends PopupWindow {
private final RecyclerView rvPopup;
private MultiTypeAdapter adapter;
private Context mContext;
private ClickListener mClickListener;
private List<String> menus;
public interface ClickListener {
void topClick(String position);
}
public void setOnTopListener(ClickListener click) {
mClickListener = click;
}
public MenuDetailPopup(Context context, List<String> menus) {
super(context);
mContext = context;
this.menus = menus;
//透明背景
// setBackgroundDrawable(mContext.getDrawable(R.drawable.detail_pop_bg));
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
setOutsideTouchable(true);
setFocusable(true);
View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_detail_popup,
null, false);
setContentView(contentView);
rvPopup = contentView.findViewById(R.id.rv_popup);
//业务相关
setAdapter();
}
private void setAdapter() {
rvPopup.setLayoutManager(new LinearLayoutManager(mContext));
adapter = new MultiTypeAdapter(menus);
adapter.register(String.class, new DiaLogDetailPopupBinder() {
@Override
public void onMenuOnclick(@NotNull String item) {
if (mClickListener != null) {
mClickListener.topClick(item);
}
}
});
rvPopup.setAdapter(adapter);
}
}
在activity中用法:
//此处为添加要显示的文字
val renewalRecord = resources.getString(R.string.title_activity_vip_renewal_record)
val redeemVip = resources.getString(R.string.title_activity_vip_redeem)
//文字添加进集合
val list = arrayListOf(
renewalRecord,
redeemVip
)
//初始化弹出框工具类
val pupup = MenuDetailPopup(requireContext(), list)
//设置其加载位置:(在指定的View弹出。x轴,y轴)
pupup.showAsDropDown(binding.includeTitle.iv_menu, 0, 10)
pupup.setOnTopListener {
if (it == renewalRecord) {
//交易记录
ARouter.getInstance()
.build(ARouterContract.VIP.renewalRecord)
.navigation()
} else if (it == redeemVip) {
//兑换会员
ARouter.getInstance()
.build(ARouterContract.VIP.redeem)
.navigation()
}
}