Android使用Toast工具类优化收藏多次点击时间累加显示问题 简易新闻(十二)

Android使用Toast工具类优化收藏多次点击时间累加显示问题 简易新闻(十二)

关于

本篇解决在新闻页面收藏新闻时候,点击收藏按钮提示成功后多次点击提示多次收藏成功并且时间累加显示的问题。
问题:
在这里插入图片描述
我们发现多次点击收藏后,提示您已经收藏过啦显示的时间很长,这是因为单次显示的时间累加起来,这样的用户体验很不好。
我们再看一下优化后的多次点击收藏提示:
在这里插入图片描述
可以看到多次点击也只显示一次的时间。

第一步,新建ToastUtil.java

新建一个Toast的工具类实现Toast显示位置以及边框等

package com.example.frametest.tools;

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.frametest.R;

public class ToastUtil {
    private static Toast toast; //实现多次点击,点击结束后只显示一次的时长
    /**
     * 短时间显示Toast【居下】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showShortToastBottom(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = new Toast(mContext);
            }
            toast.setDuration(Toast.LENGTH_SHORT);
            //自定义Toast控件
            View toastView = LayoutInflater.from(mContext).inflate(R.layout.toast_util, null);
            LinearLayout layout_toast = toastView.findViewById(R.id.layout_toast);
            //动态设置toast控件的宽高度
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dip2px(mContext, 40));
            layout_toast.setLayoutParams(layoutParams);
            layout_toast.setPadding(dip2px(mContext, 15), dip2px(mContext, 10), dip2px(mContext, 15), dip2px(mContext, 10));
            TextView tv_toast = toastView.findViewById(R.id.text_toast);
            tv_toast.setText(msg);
            toast.setGravity(Gravity.BOTTOM, 0, dip2px(mContext, 64));
            toast.setView(toastView);
            toast.show();
        }
    }

    /**
     * 短时间显示Toast【居中】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showShortToastCenter(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = new Toast(mContext);
            }
            toast.setDuration(Toast.LENGTH_SHORT);
            //自定义Toast控件
            View toastView = LayoutInflater.from(mContext).inflate(R.layout.toast_util, null);
            LinearLayout layout_toast = toastView.findViewById(R.id.layout_toast);
            //动态设置toast控件的宽高度
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dip2px(mContext, 40));
            layout_toast.setLayoutParams(layoutParams);
            layout_toast.setPadding(dip2px(mContext, 15), dip2px(mContext, 10), dip2px(mContext, 15), dip2px(mContext, 10));
            TextView tv_toast = toastView.findViewById(R.id.text_toast);
            tv_toast.setText(msg);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.setView(toastView);
            toast.show();
        }
    }

    /**
     * 短时间显示Toast【居上】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showShortToastTop(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = Toast.makeText(mContext, msg, Toast.LENGTH_SHORT);
            } else {
                toast.setText(msg);
            }
            toast.setGravity(Gravity.TOP, 0, 0);

            toast.show();
        }
    }

    /**
     * 长时间显示Toast【居下】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showLongToastBottom(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = Toast.makeText(mContext, msg, Toast.LENGTH_LONG);
            } else {
                toast.setText(msg);
            }
            toast.setGravity(Gravity.BOTTOM, 0, dip2px(mContext, 64));
            toast.show();
        }
    }

    /**
     * 长时间显示Toast【居中】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showLongToastCenter(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = new Toast(mContext);
            }
            toast.setDuration(Toast.LENGTH_LONG);
            //自定义Toast控件
            View toastView = LayoutInflater.from(mContext).inflate(R.layout.toast_util, null);
            LinearLayout layout_toast = toastView.findViewById(R.id.layout_toast);
            //动态设置toast控件的宽高度
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dip2px(mContext, 40));
            layout_toast.setLayoutParams(layoutParams);
            layout_toast.setPadding(dip2px(mContext, 15), dip2px(mContext, 10), dip2px(mContext, 15), dip2px(mContext, 10));
            TextView tv_toast = toastView.findViewById(R.id.text_toast);
            tv_toast.setText(msg);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.setView(toastView);
            toast.show();
        }
    }

    /**
     * 长时间显示Toast【居上】
     *
     * @param msg 显示的内容-字符串
     */
    public static void showLongToastTop(Context mContext, String msg) {
        if (mContext != null) {
            if (toast == null) {
                toast = Toast.makeText(mContext, msg, Toast.LENGTH_LONG);
            } else {
                toast.setText(msg);
            }
            toast.setGravity(Gravity.TOP, 0, 0);
            toast.show();
        }
    }

    /*=================================常用公共方法============================*/
    public static int dip2px(Context mContext, float dpValue) {
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
}

第二步,新建toast_util.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_toast"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/toast_border">
    <TextView
        android:id="@+id/text_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="center_vertical"
        这个是toast内字体显示的颜色
        android:textColor="@color/colorpink"/>
        // <color name="colorpink">#FF7F50</color>这个是颜色值,可以换上自己喜欢的颜色
</LinearLayout>

第三步,新建背景toast_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ff484849"/>
    <stroke android:width="1dp"
        android:color="#ff4d4c4c"/>
    <padding android:left="6dp"
       android:top="6dp"
        android:right="6dp"
        android:bottom="6dp"/>
    <corners android:radius="6dp"/>
</shape>

第四步,修改WebActivity.java

package com.example.frametest;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.support.v7.app.ActionBar;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ListView;
import android.widget.Toast;
import com.example.frametest.UserMode.LoginActivity;
import com.example.frametest.UserMode.NewsInfoAdapter;
import com.example.frametest.UserMode.UserFavoriteActivity;
import com.example.frametest.json.NewsBean;
import com.example.frametest.tools.BasicActivity;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import com.example.frametest.tools.ToastUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class WebActivity extends BasicActivity {
    private WebView webView;
    private Toolbar toolbar,ltoolBar;
    String url,user_phonenumber;
    private boolean flags=true;
    private List<NewsBean.ResultBean.DataBean> newList = new ArrayList<>();
    private ListView listView;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);
        //获取传递的路径
        webView = (WebView) findViewById(R.id.webView);
        toolbar = (Toolbar) findViewById(R.id.toolbar_webview);
        ltoolBar = (Toolbar) findViewById(R.id.toolbar_webcomment);
        listView = (ListView) findViewById(R.id.list_view);
        findViewById(R.id.toolbar_webcomment).bringToFront();
    }

    @Override
    protected void onStart() {
        super.onStart();
        url = getIntent().getStringExtra("url");
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                NewsBean.ResultBean.DataBean dataBean = newList.get(position);
                String url = dataBean.getUrl();
                Intent intent = new Intent(getApplicationContext(),WebActivity.class);
                intent.putExtra("url",url);
                startActivity(intent);
            }
        });
        //显示JavaScript页面
        WebSettings settings = webView.getSettings();
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view,url );
                view.loadUrl("javascript:function setTop(){document.querySelector('body > div.top-wrap.gg-item.J-gg-item').style.display=\"none\";}setTop();");
            
            }


            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){

//handler.cancel(); 默认的处理方式,WebView变成空白页
                handler.proceed();

//handleMessage(Message msg); 其他处理
            }

        });
        settings.setJavaScriptEnabled(true);
        settings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        settings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setUseWideViewPort(true);
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        settings.setLoadWithOverviewMode(true);
        /*settings.setDisplayZoomControls(false);*/
        webView.loadUrl(url);
        webView.setVisibility(View.INVISIBLE);

        setSupportActionBar(ltoolBar);
        toolbar.setTitle("简易新闻");
        setSupportActionBar(toolbar);
        ltoolBar.inflateMenu(R.menu.tool_webbottom);
        ltoolBar.setTitle("感谢观看");
        ltoolBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.news_share:
                        Intent intent = new Intent(Intent.ACTION_SEND);
                        intent.putExtra(Intent.EXTRA_SUBJECT,url);
                        intent.setType("text/plain");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(Intent.createChooser(intent,getTitle()));
                        break;
                    case R.id.news_collect:
                        //下一步实现点击收藏功能,以及用户查看收藏功能
                      user_phonenumber = MyApplication.getMoublefhoneUser();
                        if (user_phonenumber != null){
                            if (flags){
                            flags = !flags;
                            Toast.makeText(WebActivity.this,"收藏成功",Toast.LENGTH_SHORT).show();
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    Connection conn = null;
                                    conn = (Connection) DBOpenHelper.getConn();
                                    String uniquekey = getIntent().getStringExtra("uniquekey");
                                    String sql = "insert into user_collect(user_phone,news_id) values(?,?)";
                                    int i = 0;
                                    PreparedStatement pstmt;
                                    try {
                                        pstmt = (PreparedStatement) conn.prepareStatement(sql);
                                        pstmt.setString(1,user_phonenumber);
                                        pstmt.setString(2,uniquekey);
                                        i = pstmt.executeUpdate();
                                        pstmt.close();
                                        conn.close();
                                    } catch (SQLException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }).start();
                            }else {
                            //这里使用ToastUtil
                                ToastUtil.showShortToastCenter(WebActivity.this,"您已经收藏过啦");
                            }
                        } else {
                            Intent exitIntent = new Intent(WebActivity.this,LoginActivity.class);
                           exitIntent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
                            startActivity(exitIntent);
                        }
                        break;
                }
                return true;
            }
        });
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null){
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeAsUpIndicator(R.drawable.back);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case android.R.id.home:
                if (listView.getVisibility() ==View.VISIBLE){
                    listView.setVisibility(View.INVISIBLE);
                }else {
                    Intent returnIntent = new Intent();
                    WebActivity.this.finish();
                }
                break;
            case R.id.news_setting:
                Toast.makeText(this,"夜间模式",Toast.LENGTH_SHORT).show();
                break;
            case R.id.news_feedback:
                break;
            default:
                break;
        }
        return true;
    }
}

好啦,本篇写到这里就到此结束啦,有问题欢迎批评指正!
下一篇:Android优化获取聚合数据存储到数据库(简易新闻 十三)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值