Android基礎 四步教你理解回撥

smartsean發表於2017-12-20

前言

專案中要用到類似支付寶首頁九宮格的顯示,主要分為兩個部分:第一部分是我的應用;第二部分是全部應用。要實現可以從我的應用中刪除已新增的常用應用,也可以從全部應用新增到我的應用中。

本來是想實現可以拖動排序的,但是由於自己的技術功底還不夠,就先實現了可以增加和刪除的小功能。後來自己使用的是稍微修改過的 GridView 來實現的。

但是在實現的過程中,發現我需要在 GridView 的 item 裡面來控制在 Activity 中的和 GridView 同級別的的控制元件,就在網上搜尋,不知道是自己的搜尋方法不對,還是本身的內容就比較少,搜尋了大半天都沒搜尋到,於是問了公司的同事,同事說用一個介面來回撥就可以了。

需求

在 GridView 的 Adapter 裡面長按 item 改變 在 Activity 中的控制元件。

效果演示:

如果我長按 GridView 中的 item ,就要改變上方的“編輯”按鈕變成“完成”。效果如下:

效果圖

四步實現

1.首先定義一個介面:

public interface UpdateDataInterface {
    void setText(String text);
}
複製程式碼

2.在“編輯”控制元件所在的Activity或者Frafment中實現該介面如下:

	/**
     * 實現在adapter內部更改主頁按鈕
     * workManageTv就是顯示"編輯"和"完成"的TextView
     */
    class UpdateTextImp implements UpdateDataInterface {

        @Override
        public void setText(String text) {
            workManageTv.setText(text);
        }
    }
複製程式碼

3.然後在例項化介面卡物件的時候把這個介面傳遞進去:

// WorkMyAppAdapter就是介面卡
workMyAppAdapter = new WorkMyAppAdapter(context, new UpdateTextImp(), false);
複製程式碼

4.在介面卡裡面定義該介面,在構造方法中接收該介面,並直接拿來用,呼叫介面中的方法即可

// 定義用於回撥的類
private UpdateDataInterface updateDataInterface;

// 構造方法,接收 UpdateDataInterface 
public WorkMyAppAdapter(UpdateDataInterface updateDataInterface){
	this.updateDataInterface = updateDataInterface;
}

// 呼叫
public void changeStatus(){
	if (isEdit) {
		updateDataInterface.setText("完成");
	} else {
		updateDataInterface.setText("編輯");
	}
}
複製程式碼

以前自己總是不太清楚回撥的實現,但是模模糊糊的會用上一點,今天到自己真正需要的時候,自己一步步的去實現,才真正懂了回撥的用法。

特此記錄!

你可以通過以下方式關注我:

  1. CSDN
  2. 掘金
  3. 個人部落格
  4. Github

相關文章