Android中如何使用基于回调的事件处理
16lz
2021-01-23
- 编写接口
public interface DownloadCallback { void startDownload(); void updateProgress(int progress); void finishedDownload();}
- 编写事件源
public class HttpUtil { private Timer mTimer; private TimerTask mTimerTask; private DownloadCallback mCallback; public void setCallback(DownloadCallback callback) { this.mCallback = callback; } public HttpUtil() { mTimer = new Timer(); mTimerTask = new TimerTask() { int i = 0; @Override public void run() { if (i < 100) { mCallback.updateProgress(i++); } else { mCallback.finishedDownload(); mTimer.cancel(); } } }; } public void donwload() { mCallback.startDownload(); mTimer.schedule(mTimerTask, 1000, 50); }}
- 设置事件
public class DownloadActivity extends Activity implements DownloadCallback { private HttpUtil mHttpUtil; private final String TAG = DownloadActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_download); mHttpUtil = new HttpUtil(); mHttpUtil.setCallback(this); } @Override public void startDownload() { Log.i(TAG, "开始下载"); } @Override public void updateProgress(int progress) { Log.i(TAG, "已下载" + progress + "%"); } @Override public void finishedDownload() { Log.i(TAG, "下载完成"); }}
- 触发事件
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_download); downloadBtn = findViewById(R.id.btn_download); mHttpUtil = new HttpUtil(); mHttpUtil.setCallback(this); downloadBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mHttpUtil.donwload(); } }); }
- 查看效果
更多相关文章
- Android scrollview嵌套listview 滑动事件冲突的解决方法
- Android之TextView------LINK的点击事件
- Android触屏事件处理策略
- Android: 用Instrumentation类发送鼠标或按键事件
- Android 9.0 (P版本) 亮度控制接口变更