㈠ android怎麼在popupwindow中實現介面回調
你在B中實現c的get和set方法。在A中調用setC(this),就可以了
public class A extends Activity implements C{
@Override
public void in(int a) {
// TODO Auto-generated method stub
System.out.println(a);
}
PopupWindow p = new PopupWindow();
p.setC(this);
}
public class B extends PopupWindow{
C c;
public B() {
// TODO Auto-generated constructor stub
//怎麼實例化C啊
//c=new ??
c.in(100);
}
public void setC(C c){
this.c = c;
}
public interface C{
public void in(int a);
}
}
㈡ android 回調方法怎麼寫
package com.smart;
/**
* 定義回調介面
*/
public interface CallBack {
void execute();
}
package com.smart;
/**
* 工具類
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis(); //測試起始時間
callBack.execute();///進行回調操作
long end = System.currentTimeMillis(); //測試結束時間
System.out.println("[use time]:" + (end - begin)); //列印使用時間
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 測試類A的某個方法執行的時間
//B.method(); 測試類B的某個方式執行的時間
System.out.print("回調" );
}
});
}
}
package com.smart;
/**
* 工具類
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis();//測試起始時間
callBack.execute();///進行回調操作
long end = System.currentTimeMillis();//測試結束時間
System.out.println("[use time]:" + (end - begin));//列印使用時間
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 測試類A的某個方法執行的時間
//B.method(); 測試類B的某個方式執行的時間
System.out.print("回調");
}
});
}
}
㈢ android單例中的監聽如何回調
1) OnClickListener 介面
此介面處理的是單擊事件,例如,在 View 上進行單擊動作,在 View 獲得焦點的情況下單擊「確定」按鈕或者單擊軌跡球都會觸發該事件。
當單擊事件發生時,OnClickListener 介面會回調 public void onClick(View v) 方法對事件進行處理。其中參數 v 指的是發生單擊事件的 View 組件。
2) OnLongClickListener 介面
此介面處理的是長按事件,當長時間按住某個 View 組件時觸發該事件。
其對應的回調方法為 public boolean onLongClick(View v),當返回 true 時,表示已經處理完此事件,若事件未處理完,則返回 false,該事件還可以繼續被其他監聽器捕獲並處理。
3) OnFocusChangeListener 介面
此介面用於處理 View 組件焦點改變事件。當 View 組件失去或獲得焦點時會觸發該事件。
其對應的回調方法為 public void onFocusChange(View v, Boolean hasFocus),其中參數 v 表示產生事件的事件源,hasFocus 表示事件源的狀態,即是否獲得焦點。
4) OnKeyListener 介面
此介面用於對手機鍵盤事件進行監聽,當View獲得焦點並且鍵盤被敲擊時會觸發該事件。
其對應的回調方法為 public boolean onKey(View v, int keyCode, KeyEvent event)。
㈣ Android里怎麼介面回調的方法從fragment向Activity傳值
介面回調實現步驟
1:定義介面
2:activity實現介面,實現介面方法
3:fragment得到介面對象,在內容載入完後調用介面方法
4:在activity中介面回調方法得到回傳值
fragment---->介面回調--->activity
㈤ Android 自定義仿京東地址選擇器
public class AddressPickerViewextends RelativeLayout{
// recyclerView 選中Item 的顏色
private int defaultSelectedColor = Color.parseColor("#3D71FF");
// recyclerView 未選中Item 的顏色
private int defaultUnSelectedColor = Color.parseColor("#2c2c2c");
// 確定字體不可以點擊時候的顏色
private int defaultSureUnClickColor = Color.parseColor("#7F7F7F");
// 確定字體可以點擊時候的顏色
private int defaultSureCanClickColor = Color.parseColor("#3D71FF");
private ContextmContext;
private int defaultTabCount =3; //tab 的數量
private TabLayoutmTabLayout; // tabLayout
private RecyclerViewmRvList; // 顯示數據的RecyclerView
private StringdefaultProvince ="省份"; //顯示在上面tab中的省份
private StringdefaultCity ="城市"; //顯示在上面tab中的城市
private StringdefaultDistrict ="區縣"; //顯示在上面tab中的區縣
private ListmRvData; // 用來在recyclerview顯示的數據
private AddressAdaptermAdapter; // recyclerview 的adapter
private YwpAddressBeanmYwpAddressBean; // 總數據
private YwpAddressBean.AddressItemBeanmSelectProvice; //選中 省份bean
private YwpAddressBean.AddressItemBeanmSelectCity;//選中 城市bean
private YwpAddressBean.;//選中 區縣bean
private int mSelectProvicePosition =0; //選中 省份 位置
private int mSelectCityPosition =0;//選中 城市 位置
private int mSelectDistrictPosition =0;//選中 區縣 位置
private ;
public AddressPickerView(Context context) {
super(context);
init(context);
}
public AddressPickerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public AddressPickerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
/**
* 初始化
*/
private void init(Context context) {
mContext = context;
mRvData =new ArrayList<>();
// UI
View rootView =inflate(mContext, R.layout.address_picker_view, this);
// tablayout初始化
mTabLayout = (TabLayout) rootView.findViewById(R.id.tlTabLayout);
mTabLayout.addTab(mTabLayout.newTab().setText(defaultProvince));
mTabLayout.addTab(mTabLayout.newTab().setText(defaultCity));
mTabLayout.addTab(mTabLayout.newTab().setText(defaultDistrict));
mTabLayout.addOnTabSelectedListener(tabSelectedListener);
// recyclerview adapter的綁定
mRvList = (RecyclerView) rootView.findViewById(R.id.rvList);
mRvList.setLayoutManager(new LinearLayoutManager(context));
mAdapter =new AddressAdapter();
mRvList.setAdapter(mAdapter);
// 初始化默認的本地數據 也提供了方法接收外面數據
mRvList.post(new Runnable() {
@Override
public void run() {
initData();
}
});
}
/**
* 初始化數據
* 拿assets下的json文件
*/
private void initData() {
StringBuilder jsonSB =new StringBuilder();
try {
BufferedReader addressJsonStream =new BufferedReader(new InputStreamReader(mContext.getAssets().open("address.json")));
String line;
while ((line = addressJsonStream.readLine()) !=null) {
jsonSB.append(line);
}
}catch (IOException e) {
e.printStackTrace();
}
// 將數據轉換為對象
mYwpAddressBean =new Gson().fromJson(jsonSB.toString(), YwpAddressBean.class);
if (mYwpAddressBean !=null) {
mRvData.clear();
mRvData.addAll(mYwpAddressBean.getProvince());
mAdapter.notifyDataSetChanged();
}
}
/**
* 開放給外部傳入數據
* 暫時就用這個Bean模型,如果數據不一致就需要各自根據數據來生成這個bean了
*/
public void initData(YwpAddressBean bean) {
if (bean !=null) {
mSelectDistrict =null;
mSelectCity =null;
mSelectProvice =null;
mTabLayout.getTabAt(0).select();
mYwpAddressBean = bean;
mRvData.clear();
mRvData.addAll(mYwpAddressBean.getProvince());
mAdapter.notifyDataSetChanged();
}
}
//點確定
private void sure() {
if (mSelectProvice !=null &&
mSelectCity !=null &&
mSelectDistrict !=null) {
// 回調介面
if (mOnAddressPickerSureListener !=null) {
mOnAddressPickerSureListener.onSureClick(mSelectProvice.getN(), mSelectCity.getN(), mSelectDistrict.getN());
}
}else {
Toast.makeText(mContext, "地址還沒有選完整哦", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// mYwpAddressBean = null;
}
/**
* TabLayout 切換事件
*/
TabLayout. =new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
mRvData.clear();
switch (tab.getPosition()) {
case 0:
mRvData.addAll(mYwpAddressBean.getProvince());
mAdapter.notifyDataSetChanged();
// 滾動到這個位置
mRvList.smoothScrollToPosition(mSelectProvicePosition);
break;
case 1:
// 點到城市的時候要判斷有沒有選擇省份
if (mSelectProvice !=null) {
for (YwpAddressBean.AddressItemBean itemBean :mYwpAddressBean.getCity()) {
if (itemBean.getP().equals(mSelectProvice.getI()))
mRvData.add(itemBean);
}
}else {
Toast.makeText(mContext, "請您先選擇省份", Toast.LENGTH_SHORT).show();
}
mAdapter.notifyDataSetChanged();
// 滾動到這個位置
mRvList.smoothScrollToPosition(mSelectCityPosition);
break;
case 2:
// 點到區的時候要判斷有沒有選擇省份與城市
if (mSelectProvice !=null &&mSelectCity !=null) {
for (YwpAddressBean.AddressItemBean itemBean :mYwpAddressBean.getDistrict()) {
if (itemBean.getP().equals(mSelectCity.getI()))
mRvData.add(itemBean);
}
}else {
Toast.makeText(mContext, "請您先選擇省份與城市", Toast.LENGTH_SHORT).show();
}
mAdapter.notifyDataSetChanged();
// 滾動到這個位置
mRvList.smoothScrollToPosition(mSelectDistrictPosition);
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
};
/**
* 下面顯示數據的adapter
*/
class AddressAdapterextends RecyclerView.Adapter {
@Override
public ViewHolderonCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_address_text, parent, false));
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final int tabSelectPosition =mTabLayout.getSelectedTabPosition();
holder.mTitle.setText(mRvData.get(position).getN());
holder.mTitle.setTextColor(defaultUnSelectedColor);
// 設置選中效果的顏色
switch (tabSelectPosition) {
case 0:
if (mRvData.get(position) !=null &&
mSelectProvice !=null &&
mRvData.get(position).getI().equals(mSelectProvice.getI())) {
holder.mTitle.setTextColor(defaultSelectedColor);
}
break;
case 1:
if (mRvData.get(position) !=null &&
mSelectCity !=null &&
mRvData.get(position).getI().equals(mSelectCity.getI())) {
holder.mTitle.setTextColor(defaultSelectedColor);
}
break;
case 2:
if (mRvData.get(position) !=null &&
mSelectDistrict !=null &&
mRvData.get(position).getI().equals(mSelectDistrict.getI())) {
holder.mTitle.setTextColor(defaultSelectedColor);
}
break;
}
// 設置點擊之後的事件
holder.mTitle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 點擊 分類別
switch (tabSelectPosition) {
case 0:
mSelectProvice =mRvData.get(position);
// 清空後面兩個的數據
mSelectCity =null;
mSelectDistrict =null;
mSelectCityPosition =0;
mSelectDistrictPosition =0;
mTabLayout.getTabAt(1).setText(defaultCity);
mTabLayout.getTabAt(2).setText(defaultDistrict);
// 設置這個對應的標題
mTabLayout.getTabAt(0).setText(mSelectProvice.getN());
// 跳到下一個選擇
mTabLayout.getTabAt(1).select();
mSelectProvicePosition =position;
break;
case 1:
mSelectCity =mRvData.get(position);
// 清空後面一個的數據
mSelectDistrict =null;
mSelectDistrictPosition =0;
mTabLayout.getTabAt(2).setText(defaultDistrict);
// 設置這個對應的標題
mTabLayout.getTabAt(1).setText(mSelectCity.getN());
// 跳到下一個選擇
mTabLayout.getTabAt(2).select();
mSelectCityPosition =position;
break;
case 2:
mSelectDistrict =mRvData.get(position);
// 沒了,選完了,這個時候可以點確定了
mTabLayout.getTabAt(2).setText(mSelectDistrict.getN());
notifyDataSetChanged();
mSelectDistrictPosition =position;
sure();
break;
}
}
});
}
@Override
public int getItemCount() {
return mRvData.size();
}
class ViewHolderextends RecyclerView.ViewHolder {
TextViewmTitle;
ViewHolder(View itemView) {
super(itemView);
mTitle = (TextView) itemView.findViewById(R.id.itemTvTitle);
}
}
}
/**
* 點確定回調這個介面
*/
public interface OnAddressPickerSureListener {
void onSureClick(String proviceName,String cityName,String earaName);
}
public void setOnAddressPickerSure(OnAddressPickerSureListener listener) {
this.mOnAddressPickerSureListener = listener;
}
㈥ Android介面回調總結,以及運用到彈窗PopWindow的Demo實現
最近項目中接觸到介面回調,以及Android彈窗PopWindow組件的使用,現在利用學到的知識自己寫了一個簡單的Demo,練習下在Android下如何運用介面回調,來實現彈窗PopWindow的功能。
1. 定義一個介面:OnSelectItemListener。定義一個方法 void selectItem(String name, int type),作為點擊彈窗的每個Item的回調介面。
2. 自定義彈窗類:MyPopupWindow,其布局文件為popup_window.xml。當在MainActivity調用其構造函數創建對象時,同時執行initPopupWindow()函數,給每個Item設置監聽器,監聽點擊Item時,回調介面函數selectItem("Pop Window A", POP_WINDOW_ITEM_1),該函數在MainActivity中實現。
3. 主Activity: MainActivity。其布局文件為一個Button和一個TextView。監聽Button,每當點擊則彈出PopWindow,呈現三個Item。調用MyPopupWindow類中的方法setOnSelectItemListener(OnSelectItemListener listener),傳入OnSelectItemListener 對象作為參數,同時實現回調介面OnSelectItemListener的方法void selectItem(String name, int type)。
主Activity: MainActivity. java
[java] view plain
packagecom.lambdroid.callbacktest2;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.TextView;
importandroid.widget.Toast;
//聯系介面的回調以及PopWindow彈窗的簡單使用
{
privateMyPopupWindow myPopupWindow;
privateButton btn_pop_window;
privateTextView tv_display;
protectedContext context;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context =this;
btn_pop_window = (Button) findViewById(R.id.btn_pop_window);
tv_display = (TextView) findViewById(R.id.tv_display);
//給Button設置事件監聽:彈出彈窗
btn_pop_window.setOnClickListener(newView.OnClickListener() {
@Override
publicvoidonClick(View v) {
myPopupWindow.show(btn_pop_window);
}
});
myPopupWindow =newMyPopupWindow(context);
//實現OnSelectItemListener介面的selectItem方法:對於彈窗三個Item的事件監聽
myPopupWindow.setOnSelectItemListener(newOnSelectItemListener() {
@Override
publicvoidselectItem(String name,inttype) {
//點擊電站列表,彈出彈框
if(myPopupWindow !=null&& myPopupWindow.isShowing()) {
myPopupWindow.dismiss();
}
tv_display.setText(name);
switch(type){
caseMyPopupWindow.POP_WINDOW_ITEM_1:
Toast.makeText(context,"我是彈窗A, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();
break;
caseMyPopupWindow.POP_WINDOW_ITEM_2:
Toast.makeText(context,"我是彈窗B, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();
break;
caseMyPopupWindow.POP_WINDOW_ITEM_3:
Toast.makeText(context,"我是彈窗C, 我的英文名是"+ name, Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
});
}
}
activity_main.xml
[html] view plain
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/btn_pop_window"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="20dp"
android:padding="20dp"
android:text="Pop Window"
android:textSize="20sp"/>
android:id="@+id/tv_display"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="Hello World!"
android:textSize="30sp"/>
自定義彈窗類:MyPopupWindow.java
[java] view plain
packagecom.lambdroid.callbacktest2;
importandroid.app.ActionBar;
importandroid.content.Context;
importandroid.graphics.drawable.ColorDrawable;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.widget.LinearLayout;
importandroid.widget.PopupWindow;
.OnClickListener{
privatePopupWindow mPopWindow;
privateContext mContext;
privateLinearLayout llPop1;
privateLinearLayout llPop2;
privateLinearLayout llPop3;
privateintpw_height;
publicstaticfinalintPOP_WINDOW_ITEM_1 =1;
publicstaticfinalintPOP_WINDOW_ITEM_2 =2;
publicstaticfinalintPOP_WINDOW_ITEM_3 =3;
privateOnSelectItemListener listener;
(OnSelectItemListener listener){
this.listener = listener;
}
publicMyPopupWindow(Context context){
mContext = context;
initPopupWindow();//初始化彈窗
}
publicvoidinitPopupWindow(){
View view = LayoutInflater.from(mContext).inflate(R.layout.popup_window,null);
mPopWindow =newPopupWindow(view, ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,true);
mPopWindow.setOutsideTouchable(true);
/** 為其設置背景,使得其內外焦點都可以獲得 */
mPopWindow.setBackgroundDrawable(newColorDrawable());
mPopWindow.setFocusable(true);
pw_height = view.getHeight();
llPop1 = (LinearLayout) view.findViewById(R.id.ll_pop_1);
llPop1.setOnClickListener(this);
llPop2 = (LinearLayout) view.findViewById(R.id.ll_pop_2);
llPop2.setOnClickListener(this);
llPop3 = (LinearLayout) view.findViewById(R.id.ll_pop_3);
llPop3.setOnClickListener(this);
}
//監聽三個彈窗的點擊事件
@Override
publicvoidonClick(View v) {
switch(v.getId()){
caseR.id.ll_pop_1:
if(listener !=null) {
listener.selectItem("Pop Window A", POP_WINDOW_ITEM_1);//回調介面
}
break;
caseR.id.ll_pop_2:
if(listener !=null) {
listener.selectItem("Pop Window B", POP_WINDOW_ITEM_2);
}
break;
caseR.id.ll_pop_3:
if(listener !=null) {
listener.selectItem("Pop Window C", POP_WINDOW_ITEM_1);
}
break;
default:
break;
}
}
//顯示彈窗,並設置彈窗基於標題欄的顯示位置
publicvoidshow(View view) {
//popupwindow相對view位置x軸偏移量
View viewTemp = mPopWindow.getContentView();
viewTemp.measure(0,0);
intwidth = viewTemp.getMeasuredWidth();
intxOffset = (view.getWidth() - width) /2;
mPopWindow.showAsDropDown(view, xOffset,0);
}
/**
* 退出popupwindow
*/
publicvoiddismiss() {
if(mPopWindow !=null&& mPopWindow.isShowing()) {
mPopWindow.dismiss();
}
}
/**
* popupwindow是否正在顯示
*/
publicbooleanisShowing() {
if(mPopWindow !=null) {
returnmPopWindow.isShowing();
}
returnfalse;
}
}
popup_window.xml
[html] view plain
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
android:id="@+id/ll_alarm_type"
android:layout_width="120dp"
android:layout_height="130dp"
android:orientation="vertical"
android:background="@drawable/popupwindow"
android:paddingBottom="16dp"
android:paddingTop="16dp">
android:id="@+id/ll_pop_1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="5dp"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="窗口 A"
android:textSize="15sp"
android:textColor="#ffffff"/>
android:id="@+id/ll_pop_2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="窗口 B"
android:textSize="15sp"
android:textColor="#ffffff"/>
android:id="@+id/ll_pop_3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="窗口 C"
android:textSize="15sp"
android:textColor="#FFFFFF"/>
回調介面:OnSelectItemListener
[java] view plain
packagecom.lambdroid.callbacktest2;
{
voidselectItem(String name,inttype);
}
點擊Button,彈出彈窗,顯示三個Item
點擊第二個Item,通過回調函數,來實現TextView內容的修改,以及彈出Toast
總結
Java回調情形涉及很多,本文屬於介面的非同步回調:當不知道何時會執行介面的回調函數,(通過介面回調來對獲取到的資源的操作)。除此還有線程間的非同步回調(子線程進行耗時操作,操作完畢通知主線程或將數據傳給主線程處理),以及利用介面回調來實現線程間的數據通信等等(Android可以利用Handler來實現)。等下次再舉例說明Java回調函數的其它情形。
㈦ android最基本-自定義回調
僅以此篇記錄最最基本的介面回調的處理,常見的使用是:recyclerview的條目點擊事件...
以recylerview的條目點擊事件為例,步驟:
1.在Adapter中定義MyOnItemClickListener介面, 在介面中定義抽象方法
㈧ Android 自定義控制項中實現介面回調時為什麼影響界面繪線
SurfaceView是View的子類,它內嵌了一個專門用於繪制的Surface,你可以控制這個Surface的格式和尺寸,Surfaceview控制這個Surface的繪制位置。surface是縱深排序(Z-ordered)的,說明它總在自己所在窗口的後面。SurfaceView提供了一個可見區域,只有在這個可見區域內的surface內容才可見。surface的排版顯示受到視圖層級關系的影響,它的兄弟視圖結點會在頂端顯示。這意味者 surface的內容會被它的兄弟視圖遮擋,這一特性可以用來放置遮蓋物(overlays)(例如,文本和按鈕等控制項)。注意,如果surface上面有透明控制項,那麼每次surface變化都會引起框架重新計算它和頂層控制項的透明效果,這會影響性能。
SurfaceView默認使用雙緩沖技術的,它支持在子線程中繪制圖像,這樣就不會阻塞主線程了,所以它更適合於游戲的開發。
SurfaceView的使用
首先繼承SurfaceView,並實現SurfaceHolder.Callback介面,實現它的三個方法:surfaceCreated,surfaceChanged,surfaceDestroyed。
surfaceCreated(SurfaceHolder holder):surface創建的時候調用,一般在該方法中啟動繪圖的線程。
surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸發生改變的時候調用,如橫豎屏切換。
surfaceDestroyed(SurfaceHolder holder) :surface被銷毀的時候調用,如退出遊戲畫面,一般在該方法中停止繪圖線程。
還需要獲得SurfaceHolder,並添加回調函數,這樣這三個方法才會執行。
SurfaceView實戰
下面通過一個小demo來學習SurfaceView在實際項目中的使用,繪制一個精靈,該精靈有四個方向的行走動畫,讓精靈沿著屏幕四周不停的行走。
㈨ android介面回調的幾種
可以使用Observer,觀察者模式來實現回調。或者介面中傳入類,然後在介面處理之後,進行調用類的方法進行回調。
介面回調示例
public interface ConfirmDialogListener{
public void onLeft(Object obj); //按確認鍵
public void onRight(Object obj);//按back鍵
}
public static Dialog confirmDialog(final Context activity, final ConfirmDialogListener listener,final Object obj){
if(listener != null)
listener.onRight(obj);
}