自定义DialogFragment,包裹Recyclerview,并处理点击事件

上菜了:

package com.sf.microwarehouse.utils;

import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.sf.microwarehouse.R;
import com.sf.microwarehouse.activity.skushouhuo.ListForItemCodesAdapter;

import java.util.ArrayList;
import java.util.List;

public class MyDialogListForRecycleview extends DialogFragment {
    private ListForItemCodesAdapter listAdapter = null;
    private List<String> uniqueCodes = new ArrayList<>();
    public ClickCallBack mClickCallBack;
    private String code;

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        return super.onCreateDialog(savedInstanceState);
    }

    public void setData(List<String> codes){
        uniqueCodes = codes;
    }

    public void setCallback(ClickCallBack callback) {
        this.mClickCallBack = callback;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_diglog, null);

        RecyclerView recyclerView = view.findViewById(R.id.rv_item_69_codes);
        //创建布局管理 rv_item_69_codes
        LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
        layoutManager.setOrientation(layoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
        listAdapter = new ListForItemCodesAdapter(R.layout.item_code_detail);
        recyclerView.setAdapter(listAdapter);
        if(uniqueCodes != null && uniqueCodes.size()>0){
            listAdapter.setNewData(uniqueCodes);
        }




        listAdapter.setOnItemClickListener((adapter, view1, position) -> {
                    code = uniqueCodes.get(position);
                    if (mClickCallBack != null) {
                        mClickCallBack.onItemClick(code);
                    }
                }
        );
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        super.onActivityCreated(savedInstanceState);

        //① 设置对话框内的内容为透明
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //② . 将对话框外的内容设置为透明
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
        windowParams.dimAmount = 0.0f;
        window.setAttributes(windowParams);

    }

    @Override
    public void onResume() {
        super.onResume();
        //动态设置宽高
        getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }

    @Override
    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
        return super.onCreateAnimation(transit, enter, nextAnim);
    }

    public interface ClickCallBack {
        void onItemClick(String code);
    }

}

调用很简单:

//新增弹出列表,先初始化
myDialog = new MyDialogListForRecycleview();
//处理点击事件
myDialog.setCallback(new MyDialogListForRecycleview.ClickCallBack() {
    @Override
    public void onItemClick(String code) {
        ToastUtils.show(code);
        myDialog.dismiss();
    }
});

在需要展示Dialog的地方

//显示dialog并展示数据
myDialog.show(getSupportFragmentManager(), "dialog");
myDialog.setData(uniqueCodes);

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值