簡單的消息置頂

来源:https://www.cnblogs.com/LiuZhen/archive/2018/03/26/8651897.html
-Advertisement-
Play Games

先看看效果圖 一個消息列表,然後點擊item後會刷新時間,點擊置頂後也會刷新時間,置頂規則就是根據兩個欄位來排序 如果是置頂狀態,top為1,然後每次操作都會刷新 time的時間,time是存的時間戳,先看看實體類 package com.fragmentapp.home.bean; import ...


 

 

先看看效果圖

一個消息列表,然後點擊item後會刷新時間,點擊置頂後也會刷新時間,置頂規則就是根據兩個欄位來排序

如果是置頂狀態,top為1,然後每次操作都會刷新 time的時間,time是存的時間戳,先看看實體類

package com.fragmentapp.home.bean;

import android.support.annotation.NonNull;
import java.util.Calendar;

/**
 * Created by liuzhen on 2018/3/22.
 */

public class ChatBean implements Comparable<ChatBean> {

    private int id;

    private int top;

    /**
     * 置頂時間
     **/
    public long time;

    public int getTop() {
        return top;
    }

    public void setTop(int top) {
        this.top = top;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    /**
     * 根據時間對比
     * */
    public int compareToTime(long lhs, long rhs) {
        Calendar cLhs = Calendar.getInstance();
        Calendar cRhs = Calendar.getInstance();
        cLhs.setTimeInMillis(lhs);
        cRhs.setTimeInMillis(rhs);
        return cLhs.compareTo(cRhs);
    }

    @Override
    public int compareTo(@NonNull ChatBean chatBean) {
        if (chatBean == null) {
            return -1;
        }
        /** 判斷是否置頂 */
        int result = 0 - (top - chatBean.getTop());
        if (result == 0) {
            /** 按時間排序 */
            result = 0 - compareToTime(time, chatBean.getTime());
        }
        return result;
    }
}
View Code

然後需要在adapter裡面把一些輔助的方法寫進去,方便ui層調用,其實就是三個方法,一個作用是點擊時間刷新 time欄位,一個是置頂方法 設置置頂狀態和刷新時間,還有一個是添加數據的時候排序

然後就容易了,調介面返回數據

 

package com.fragmentapp.home.adapter;

import android.view.View;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseViewHolder;
import com.fragmentapp.R;
import com.fragmentapp.base.ArrayRecyclerAdapter;
import com.fragmentapp.home.bean.ChatBean;
import com.fragmentapp.view.remove.SwipeItemLayout;

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

/**
 * Created by liuzhen on 2017/11/20.
 */

public class HomeAdapter extends ArrayRecyclerAdapter<ChatBean, HomeAdapter.ViewHolder> {

    private int topPosition = -1;

    public HomeAdapter(int layoutResId) {
        super(layoutResId);
    }

    @Override
    protected void convert(final ViewHolder holder, final ChatBean bean) {
        if (bean.getTop() == 1){
            holder.root.setBackgroundResource(R.color.color_EEEEEE);
            holder.top.setText("取消置頂");
        }else{
            holder.root.setBackgroundResource(R.color.white);
            holder.top.setText("置頂");
        }
        holder.tv_title.setText("00"+bean.getId()+"號");
        holder.tv_content.setText("大家好,我是00"+bean.getId()+"號,我的top是"+bean.getTop());
        holder.tv_time.setText(bean.getTime()+"");
        //        GlideApp.with(AndroidApplication.getInstance().getApplicationContext())
//                .load(item.path)
//                .skipMemoryCache(true)
//                .diskCacheStrategy(DiskCacheStrategy.NONE)
//                .centerCrop()
//                .transform(new RoundedCorners(10))
//                .into(imageView);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        super.onBindViewHolder(holder, position);

        final ChatBean bean = getItem(position);

        holder.item_layout.setSwipeAble(true);
        holder.item_layout.setDelegate(new SwipeItemLayout.SwipeItemLayoutDelegate() {
            @Override
            public void onSwipeItemLayoutOpened(SwipeItemLayout swipeItemLayout) {


            }

            @Override
            public void onSwipeItemLayoutClosed(SwipeItemLayout swipeItemLayout) {
                if (topPosition >= 0) {
                    if (bean.getTop() == 0){
                        bean.setTime(System.currentTimeMillis());
                        setTop(position,1);
                    }else{
                        setTop(position,0);
                    }
                    topPosition = -1;
                }
            }

            @Override
            public void onSwipeItemLayoutStartOpen(SwipeItemLayout swipeItemLayout) {

            }
        });

        holder.del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (topPosition == -1) {
                    holder.item_layout.closeWithAnim();
                }
            }
        });
        holder.top.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (topPosition == -1) {
                    holder.item_layout.closeWithAnim();
                    topPosition = position;
                }
            }
        });
    }

    private void setTop(int position,int top){
        mData.get(position).setTop(top);
        Collections.sort(mData);
        notifyDataSetChanged();
    }

    public void click(int position){
        mData.get(position).setTime(System.currentTimeMillis());
        Collections.sort(mData);
        notifyDataSetChanged();
    }

    public List<ChatBean> sortList(List<ChatBean> list){
        Collections.sort(list);
        return list;
    }

    static class ViewHolder extends BaseViewHolder
    {

        TextView tv_title,tv_content,tv_time,tv_home,tv_read,del,top;
        SwipeItemLayout item_layout;
        View root;

        public ViewHolder(View view)
        {
            super(view);
            tv_title = getView(R.id.tv_title);
            tv_content = getView(R.id.tv_content);
            tv_time = getView(R.id.tv_time);
            tv_home = getView(R.id.tv_home);
            tv_read = getView(R.id.tv_read);

            item_layout = getView(R.id.item_layout);

            root = getView(R.id.root);

            del = getView(R.id.item_contact_delete);
            top = getView(R.id.item_contact_top);

        }
    }

}
View Code

這裡我給加了個控制符,topPosition,因為點擊時間和滑動刪除監聽不再一起,所以要記錄一下你點擊的操作,這樣也能防止你這個還沒置頂就點下一個了,導致索引錯亂

 

GitHub:https://github.com/1024477951/FragmentApp


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ORACLE配置tnsnames.ora文件實例 客戶機為了和伺服器連接,必須先和伺服器上的監聽進程聯絡。ORACLE通過tnsnames.ora文件中的連接描述符來說明連接信息。一般tnsnames.ora 是建立在客戶機上的。如果是客戶機/伺服器結構,整個網路上只有一臺機器安裝了ORACLE數據 ...
  • mysql查詢錯誤 Unknown error 1054 錯誤原因:欄位名字不對應 解決方案:一一比對欄位名稱,令實體欄位名稱與資料庫欄位對應或者與你的sql語句中的別名對應起來 ...
  • 描述:根據企業名稱關鍵詞查詢返回企業名稱 、店鋪名稱、電商平臺 、平臺類型、數據所屬期、銷售總額 、總銷量、省份、城市、主營大類、主營小類、店鋪地址等。應用場景:對企業名稱關鍵字進行查詢,定位電商企業。 來源:https://www.tdata.cn/api/content/index/id/194 ...
  • 一、首先配置redis的主從同步集群。 1、主庫的配置文件不用修改,從庫的配置文件只需增加一行,說明主庫的IP埠。如果需要驗證的,也要加多一行,認證密碼。 slaveof 192.168.20.26 5268 masterauth hodge01 一主多從的話,就啟用多個從庫。其中,從庫都是一樣的 ...
  • 預設情況下, MySQL啟用自動提交模式(變數autocommit為ON)。這意味著, 只要你執行DML操作的語句,MySQL會立即隱式提交事務(Implicit Commit)。這個跟SQL Server基本是類似的。如果你瞭解SQL Server資料庫的話。 查看autocommit模式 由於變... ...
  • 在開發通用型應用的時候,你總是需要記住,iPad並不是一個大大的iPod touch,為iPad開發的應用的界面應該更好地利用iPad的大屏幕,而不應該是iPhone應用的複製品。 參考資料:《iOS編程指南》 ...
  • 這裡說一個官方推薦的寫法: 根據上面的代碼,一旦綁定activity,也自然會註冊介面,所以只要在activity中實現介面便可以了。 ...
  • 動畫 1.常規動畫屬性設置(可以同時選擇多個進行設置) UIViewAnimationOptionLayoutSubviews:動畫過程中保證子視圖跟隨運動。**提交動畫的時候佈局子控制項,表示子控制項將和父控制項一同動畫。** UIViewAnimationOptionAllowUserInteract ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...