转载请注明出处:如何写监听回调(事件完成监听、点击响应监听 )_Mr_Leixiansheng的博客-CSDN博客
* 主要对监听回调做一个简单说明
* 监听的作用:某一事件只要出现,就会调用其对应的方法,进行响应操作
*
* 方式有2
* 1:常规方式。和控件设置点击监听一样,点击后实现响应操作
* 2:方法调用方式。常用于等待某一事件完成后在进行相应操作,比如数据获取,再刷新UI。要先等待数据获取完毕才能刷新。
内容:通过监听方式,获取数据,再刷新UI
步骤:
1、新建一个类
2、类中定义一个接口
3、对外暴露接口(无论是点击方式暴露,还是调用方法暴露)(接口的方法中可以传递数据)
4、主程序中设置监听,调用接口,在监听中获取数据,以handler方式刷新UI
代码如下:
1、新建类,设置好监听
package com.leixiansheng.testlistener; import android.content.Context; import android.util.Log; /** * Created by Leixiansheng on 2017/6/28. */ public class JsonData { private Context context; //构造函数,获取上下文 public JsonData(Context context) { this.context = context; } //定义接口 public interface OnLoadingFinishListener { public void getData(String str); } //调用方法方式对外暴露接口 public void connect(OnLoadingFinishListener listener) { Log.i("JsonData", "connect"); listener.getData("实现一个监听回调功能"); } //点击监听方式对外暴露接口(一般要继承某些父类) private OnLoadingFinishListener listener; public void setOnLoadingFinish(OnLoadingFinishListener listener) { this.listener = listener; } /** * 之后在方法中实现对listener.getData即可 */ }
2、主场呢供需中实现监听回调
package com.leixiansheng.testlistener; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; /** * 主要对监听回调做一个简单说明 * 监听的作用:某一事件只要出现,就会调用其对应的方法,进行响应操作 * * 方式有2 * 1:常规方式。和控件设置点击监听一样,点击后实现响应操作 * 2:方法调用方式。常用于等待某一事件完成后在进行相应操作,比如数据获取,再刷新UI。要先等待数据获取完毕才能刷新。 */ public class MainActivity extends AppCompatActivity { private JsonData.OnLoadingFinishListener mListener; private JsonData jsonData; private TextView tvData; private String setText; /** * handler方式刷新界面 */ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); tvData.setText(setText); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvData = (TextView) findViewById(R.id.json_data_tv); jsonData = new JsonData(this); /** * 设置监听 */ mListener = new JsonData.OnLoadingFinishListener() { @Override public void getData(final String str) { //此处获取数据 Log.i("MainActivity:", str); setText = str; //求情刷新UI handler.sendEmptyMessageDelayed(1, 2000); } }; //方法式调用接口 jsonData.connect(mListener); /** * 点击监听式调用接口 */ jsonData.setOnLoadingFinish(new JsonData.OnLoadingFinishListener() { @Override public void getData(String str) { Toast.makeText(MainActivity.this, "点击监听式调用接口",Toast.LENGTH_SHORT).show(); } }); } }
布局只有一个TextView