1. 程式人生 > >區域性重新整理ListView,實現點贊功能

區域性重新整理ListView,實現點贊功能

今天看到一個需要實現一個點讚的功能。自己想沒想明白,後來看了http://blog.csdn.net/nupt123456789/article/details/39432781 這篇部落格,才有了思路。特意感謝


這是我要用的ListView的item。要給ListView設定單個重新整理,實現點選事件。
1.佈局  (不要問我為什麼是絕對佈局,,我開心)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical" >
    <AbsoluteLayout
        android:layout_width="match_parent"
       android:layout_height="wrap_content"
        >
       
         <TextView
             android:id="@+id/username"
             android:layout_width="350px"
             android:layout_height="40px"
             android:layout_x="110px"
             android:layout_y="25px"
             android:text="使用者名稱"
             android:textSize="30px"
             android:gravity="bottom"
             android:textColor="#000000"
             ></TextView>


        <!-- 要用的點贊   icon_comments_praise_un這是一個點讚的圖片-->
         <ImageView
             android:id = "@+id/image_praise"
             android:layout_width ="30px"
             android:layout_height = "30px"
             android:layout_y = "30px"
             android:layout_x = "500px"
             android:scaleType="fitXY"
             android:src="@drawable/icon_comments_praise_un"
             ></ImageView>
    </AbsoluteLayout>
</LinearLayout>


2.老樣子,在你的Adapter裡面老樣子寫就是啦。
public class CommentAdapter extends BaseAdapter {


    private Context context;
    private ArrayList<CommentItem> items;




    public CommentAdapter(Context context, ArrayList<CommentItem> items) {
        this.context = context;
        this.items = items;
    }


    @Override
    public int getCount() {
        return items.size();
    }


    @Override
    public Object getItem(int position) {
        return null;
    }


    @Override
    public long getItemId(int position) {
        return 0;
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.mymessage_item, null);
            holder.image_praise = (ImageView) convertView.findViewById(R.id.image_praise);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


        //沒有點選時的手指是灰色手指圖片
        holder.image_praise.setImageBitmap(common.readBitMapJpg(context, R.drawable.icon_comments_praise));
        final ViewHolder finalHolder = holder;
        //給你點讚的控制元件設定點選事件
        View.OnTouchListener listener = new View.OnTouchListener() {
            private boolean image_record_out;


            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                switch (arg1.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        switch (arg0.getId()) {
                            case R.id.image_praise:
                                image_record_out = false;
                                finalHolder.image_praise.setAlpha(0.5f);
                                break;
                        }
                        break;
                    case MotionEvent.ACTION_MOVE:
                        switch (arg0.getId()) {//手指一旦離開點讚的控制元件,就把點選事件取消
                            case R.id.image_praise:
                                int x = (int) arg1.getX();
                                int y = (int) arg1.getY();
                                if (x < 0 || y < 0 || x > finalHolder.image_praise.getWidth() || y > finalHolder.image_praise.getHeight()) {
                                    image_record_out = true;
                                }
                                break;
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        switch (arg0.getId()) {
                            case R.id.image_praise://點贊
                                finalHolder.image_praise.setAlpha(1.0f);
                                if (!image_record_out) {
                                    //這裡開始啦
                                    // 得到你點選的item的position;然後請求你的網路介面,你會問這個網路介面是啥子,這麼說:寫後臺那個人給你寫的網路介面。
                                    // commentAttention這個就是我呼叫網路介面的方法,我這裡就直接強轉了。
                                    // commentAttention方法就在InformationActivity類裡面
                                    ((InformationActivity) context).commentAttention(position);
                                }
                                break;
                        }
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        switch (arg0.getId()) {
                            case R.id.image_praise:
                                finalHolder.image_praise.setAlpha(1.0f);
                                break;
                        }
                }
                return true;
            }
        };
        holder.image_praise.setOnTouchListener(listener);
        return convertView;
    }


    public static class ViewHolder {
        public ImageView image_praise;
    }
}


3.當你請求網路介面成功後,就可以呼叫這個方法了,這裡注意一下,你請求網路介面的時候肯定是在子執行緒裡面。子執行緒是不能更新UI的。
//實現單個item重新整理  引數就是adapter裡面傳過來的你點選的哪一個ListView的position
private void updateZan(int position) {
    //得到你螢幕上第一個顯示的item
    int firstVisiblePosition = listView.getFirstVisiblePosition();
    //得到你螢幕上最後一個顯示的item
    int lastVisiblePosition = listView.getLastVisiblePosition();
    if (position >= firstVisiblePosition && position <= lastVisiblePosition) {
        //得到你點選的item的view
        View view = listView.getChildAt(position - firstVisiblePosition);
        if (view.getTag() instanceof CommentAdapter.ViewHolder) {
            //拿到view的Tag,強轉成CommentAdapter的ViewHolder
            CommentAdapter.ViewHolder holder = (CommentAdapter.ViewHolder) view.getTag();
            if (!isComment) {// 這裡我用了一個變數來控制,點第一次時,點贊成功,點贊控制元件顯示藍色的圖示,
                             // 點選第二次時,取消點贊,點贊控制元件顯示灰色的圖示。
                isComment = true;
                holder.image_praise.setImageBitmap(common.readBitMapJpg(this, R.drawable.icon_comments_praise_un));
            } else {
                isComment = false;
                holder.image_praise.setImageBitmap(common.readBitMapJpg(this, R.drawable.icon_comments_praise));
            }
        }
    }
}


如果有什麼我還說的不明白,請加群:305156665,我們一起學習討論

相關推薦

區域性重新整理ListView實現功能

今天看到一個需要實現一個點讚的功能。自己想沒想明白,後來看了http://blog.csdn.net/nupt123456789/article/details/39432781 這篇部落格,才有了思路。特意感謝 這是我要用的ListView的item。要給ListView

Android中Listview實現功能

最近這段時間一直在看Android,利用Listview去實現點贊功能 基本思路: 進入介面–》獲取資料–》 在Listview中顯示–》 通過map集合(position,boolean)儲存每一行是否被點選–》 利用實體類去儲存相應的物件–》 g

基於ssm下用jQuery簡單實現功能

    自己寫專案的時候了用到了這個點贊與取消讚的功能,然後突然心血來潮,想在這裡寫篇部落格,也算是小小的總結一下,廢話不多說了,給大家上圖上碼才是重點。    下圖是知乎裡面的我的文章的截圖,現在就是要實現他的點贊功能。下圖是我自己寫的頁面jsp頁面點贊那一塊的程式碼:&l

flask + ajax + mysql +jquery實現功能

1.需求:實現點贊點滅,同一使用者對一篇文章不可重複點贊和點滅,要求把數量顯示出來 2.方法:建兩張表(一張也可以),分別儲存點讚的文章id+使用者,點滅的文章id+使用者名稱 3.使用非同步的方法

Android ListView選之後保持更換的背景色實現已讀功能

        因為專案中有這樣的需求:一般訊息類或者資訊類的介面,都有類似於網易客戶端的點選之後更換背景色,並且保持這個顏色,表示已讀取該條資訊。這個功能一開始覺得已經實現了,在我的另一篇部落格上有:點選開啟連結 後來測試人員在測試的時候,發現這樣一個奇怪的問題:    

Ajax+jQuery+bootstrap+Java實現非同步功能並限制選次數

(下面截圖是自己專案的截圖) 當已經點贊後,滑鼠再經過時,就會顯示 "禁止的圖示"  (相應的class 會變化) cursor:not-allowed 在很多的網站上有很多不同的點贊,我不知道他們是怎麼實現的,下面我來分享一下我寫的點贊實現,共大家參考下, 這是我在一個專案抽取的程式碼

php + ajax實現 帖子功能

data inpu 局部刷新 瀏覽器 query 實現 script 函數 syn 知識: 一、首先頁面需要加載jquery框架 二、ajax常用參數解釋: ①、type:傳輸數據方式,get或者post ②、url:處理數據的PHP腳本 ③、data:傳輸的數據索引及值,

mongodb 用戶功能理論實現[轉載]

mongod div select AC 數組 pan exist class TP 在 posts(文章) 集合中儲存對該文章點贊的用戶的 _id 的數組,例如: // posts { _id: ObjectID(‘4e7020cb7cac81af7136236

功能豐富的WordPress插件不少但對於要在主題中集成簡單文章功能的需求插件就顯得不合

localhost cal _id domain pda eric func 功能 numeric add_action(‘wp_ajax_nopriv_bigfa_like‘, ‘bigfa_like‘); add_action(‘wp_ajax_bigfa_like‘,

bbs專案實現和評論的功能

一、點贊功能  先看下前端的程式碼,如下這段程式碼是我直接從部落格園上爬下來的 <div class="poll clearfix"> <div id="div_digg"> <div c

微信小程式實現、取消功能

最近接觸到小程式,發現很有意思,在專案中遇到了一點小問題,就是點贊+取消點贊有些衝突,還有就是多項的點選,話不多說咱們直接上程式碼! 效果圖 wxml ? 1

搭建自己的部落格(二十五):優化功能並新增模態登入框

1、變化的部分: 2、上程式碼: {# 引用模板 #} {% extends 'base.html' %} {% load staticfiles %} {% load comment_tags %} {% load likes_tags %} {% block h

WordPress非外掛實現文章功能

功能豐富的WordPress點贊外掛不少,但對於要在主題中整合簡單文章點贊功能的需求,外掛就顯得不合適,於是乎非外掛實現文章點贊功能的方法就誕生,實現思路是:可以通過ajax實時顯示點贊數量,自定義欄位儲存贊數量,Cookies禁止重新點贊。 具體操作步驟。 1、在當前主

Android列表載入更多資料實現

MainActivity package com.gz.test_listview; import android.app.Activity; import android.content.Intent; import android.os.Bundle

一個“功能實現程式碼

“點贊”是最近很流行的一個詞,自己也琢磨了一下程式碼,暫時只實現了功能性程式碼,要新增漂亮效果,可以繼續用Jquery來實現。看效果請點選:http://www.i5wl.com/example/praise/。 主要有兩個檔案:一是:index.htm,呈現前端頁面,主要是利用Jquery的$.get()

Android 仿微博的上報功能持續再取消

             產品需求,實現類似微博的持續點贊再取消功能,因為自己也偶爾刷微博,對這功能有一定的使用上的瞭解,       至於微博點讚的具體實現我並不知道,微博點贊在斷網的情況下依然能點贊,不會提示網路異常,等有網路之後       重新重新整理,實際是沒有點讚

AccessibilityService——實現自動遍歷功能

/** * Created by jiangzn on 17/2/6. */ public class MyAccessibilityService extends AccessibilityService { @Override protected void onServiceConn

jquery ajax之功能實現

之前,一直想用一下ajax的技術到專案中,看他到底好處在哪裡,為什麼會被這麼多人所推崇。 還記得之前也是看過jquery,但是現在回過來想想,其實能夠記起來的東西很少,只有將知識應用起來,可能才會記憶深刻吧!今年開始我逐漸開始積累起自己的一些程式碼和 新知識,這樣的話到以後

Redis應用2-Redis實現開發者頭條頁面功能

開發者頭條是一個資源豐富的程式猿學習網站。當網站釋出新的內容的時候,內容優秀的總是會被點贊。今天就利用Redis實現這個小小的功能。 為什麼使用Redis而不是MySQL實現? Redis 和 MySQL應用場景不同。 從效率來說: Redis

Spring Boot + Redis + MQ實現高併發功能:專案實戰

開心一笑 【最後一次警告看我CSDN部落格的人,你們都他媽給老子小心點,首先我不管你是什麼身份,什麼背景,混的有多牛逼,是不是老闆,是不是社會人,這些我都不知道,我也都不在意,你們給我記住,都給我認真點看清楚:最近天氣實在很涼,大家多穿衣服,彆著涼了,知道不!