是用toast or dialog 傻傻分不清楚

今天在手机上有看到类似于这个

已收藏这一栏,原本还以为是个toast,但是翻阅了一下源码结果发现toast并没有监听这个功能

那这个时候怎么办呢,对了,就是用dialog

//此dialog直接用来做收藏功能提示
public class ToastDetailDialog extends BaseDialog implements View.OnClickListener{

    private LeaveMyDialogListener listener;
    private TextView text_title;
    private TextView text_content;

    /** 监听器 */
    public ToastDetailDialog(Context context) {
        super(context);
    }
    /** 监听器 */
    public ToastDetailDialog(Context context, LeaveMyDialogListener listener) {
        super(context);
        /**
         * 记得判空,不然会报空指针
         */
        if(listener ==null){
            return;
        }
        this.listener = listener;
    }
    @Override
    public void onClick(View v) {
        if(listener == null){
            return;
        }
        listener.onClick(v);
    }
    public interface LeaveMyDialogListener{
        public void onClick(View view);
    }
    @Override
    protected int getLayoutId() {
        return R.layout.toast_custom_view;
    }

    @Override
    protected void findViews() {
        text_title = (TextView) findViewById(R.id.title);
        text_content = (TextView) findViewById(R.id.content);
        text_title.setText("已收藏");
        text_content.setText(",点击查看");
        text_content.setOnClickListener(this);
    }
    public void setListener(LeaveMyDialogListener listener){
        this.listener = listener;
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/linear"
    android:background="@drawable/rounded_edittext2"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/white"
        android:layout_marginLeft="12dp"
        android:textSize="16dp"
        tools:text="asdsad" />

    <ImageView
        android:visibility="gone"
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:contentDescription="@string/app_name"
        tools:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp"
        android:textSize="16dp"
        android:textColor="#358ff0"
        tools:text="aweqwewqewqe" />

</LinearLayout>

@drawable/rounded_edittext2:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="#666666"></solid>
    <corners android:radius="18dp" />
</shape>

就是这样,然后性质啵啵的写完了,点击验证了一下,发现不对,有问题

/**
 * 原本是想说用toast来做这个事情,但是居然toast没有监听,所以就采用dialog来做
 */
dialog = new ToastDetailDialog(DetailContentActivity.this);
dialog.setListener(new ToastDetailDialog.LeaveMyDialogListener() {
    @Override
    public void onClick(View view) {
        CollectionActivity.start(DetailContentActivity.this);
    }
});
dialog.show();

运行居然是这样的

 背景有个透明的东西,这不就让别人知道我们用的是dialog嘛,哈哈

这回怎么办呢,没关系,作为程序猿都会有办法

dialog.getWindow().setDimAmount(0f);对了就是这句话,我们再运行看看

好像可以了哦!!!但是会发现这时候dialog 如果不去点击他不会消失,这时候想给读者像toast一样的感觉,这时候怎么办呢

哈哈,就是用线程啦!我们让他延迟3秒

new Handler().postDelayed(new Runnable(){
//
//                public void run() {
//                    //execute the task
//                    dialog.dismiss();
//                }
//
//            }, 3000);

//原本要使用以上线程但是会出现内存泄露

这时候就要用到弱引用啦

Constant.SWITCH_DETAILTIVITY 这个呢在Constant里面大家可以定义一个int类型就好了,哈哈就在下面这个啦

public final static int SWITCH_DETAILTIVITY = 1;
private DetailContentActivity.MyHandler mHandler = new DetailContentActivity.MyHandler(DetailContentActivity.this);
    private class MyHandler extends Handler{
        private final WeakReference<DetailContentActivity> weakReference;

        public MyHandler(DetailContentActivity activity){
            weakReference =  new WeakReference<>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what ==Constant.SWITCH_DETAILTIVITY){
                if(weakReference.get()!=null){
                    dialog.dismiss();
                }
            }
        }
    }

详细代码在这里哦

/**
 * 原本是想说用toast来做这个事情,但是居然toast没有监听,所以就采用dialog来做
 */
dialog = new ToastDetailDialog(DetailContentActivity.this);
dialog.getWindow().setDimAmount(0f);//设置dialog背景全透明
dialog.setListener(new ToastDetailDialog.LeaveMyDialogListener() {
    @Override
    public void onClick(View view) {
        CollectionActivity.start(DetailContentActivity.this);
    }
});
dialog.show();
mHandler.sendEmptyMessageDelayed(Constant.SWITCH_DETAILTIVITY,3000);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值