- 我的简书:
- 我的CSDN:
- 我的GitHub:
前言
项目中要用到类似支付宝首页九宫格的显示,主要分为两个部分:第一部分是我的应用;第二部分是全部应用。要实现可以从我的应用中删除已添加的常用应用,也可以从全部应用添加到我的应用中。
本来是想实现可以拖动排序的,但是由于自己的技术功底还不够,就先实现了可以增加和删除的小功能。后来自己使用的是稍微修改过的 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("编辑");
}
}
以前自己总是不太清楚回调的实现,但是模模糊糊的会用上一点,今天到自己真正需要的时候,自己一步步的去实现,才真正懂了回调的用法。
特此记录!