前言
專案中要用到類似支付寶首頁九宮格的顯示,主要分為兩個部分:第一部分是我的應用;第二部分是全部應用。要實現可以從我的應用中刪除已新增的常用應用,也可以從全部應用新增到我的應用中。
本來是想實現可以拖動排序的,但是由於自己的技術功底還不夠,就先實現了可以增加和刪除的小功能。後來自己使用的是稍微修改過的 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("編輯");
}
}
複製程式碼
以前自己總是不太清楚回撥的實現,但是模模糊糊的會用上一點,今天到自己真正需要的時候,自己一步步的去實現,才真正懂了回撥的用法。
特此記錄!
你可以通過以下方式關注我: