本篇解决在新闻页面收藏新闻时候,点击收藏按钮提示成功后多次点击提示多次收藏成功并且时间累加显示的问题。
问题:
我们发现多次点击收藏后,提示您已经收藏过啦显示的时间很长,这是因为单次显示的时间累加起来,这样的用户体验很不好。
我们再看一下优化后的多次点击收藏提示:
可以看到多次点击也只显示一次的时间。
新建一个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);
}
}
<?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"/>
// #FF7F50 这个是颜色值,可以换上自己喜欢的颜色
</LinearLayout>
<?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>
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优化获取聚合数据存储到数据库(简易新闻 十三)