Android学习之五种界面通信方法总结

界面通信相信大家都很熟悉,近来在工作中也遇到各种各样的界面通信问题,今天以此总结之!

界面通信,就是Activity之间的数据传递,(Fragment也属于Activity)

通信方式1:startActivity()

    public void toBindActivity(Activity act, Bundle bundle) {
        startActivity(act, BindActivity.class, bundle);
    }

在跳转的同时传值

接收:

int position = getIntent().getExtras().getInt("position");

通信方式2:创建public方法

public UserModel getUserInfo(){
        return usermodel;
    }

接收:

UserModel model=new MainActivity().getUserInfo();

通信方式3:回调接口

创建接口

public interface FragmentCallBack {
    ThirdModel getThirdModel();
}

实现接口

public class BindActivity extends BaseActivity implements FragmentCallBack
{
 @Override
    public ThirdModel getThirdModel() {
        return thirdModel;
    }
}

接收:

 private ThirdModel thirdModel;
 private FragmentCallBack callBack;

  @Override
    protected void initData() {
        thirdModel = callBack.getThirdModel();

 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        callBack = (BindActivity) activity;

    }

通信方式4: 广播实现通信

广播的注册分为动态和静态两种,具体注册不在介绍。

public class DemoReceiver extends BroadcastReceiver {
    private LogUtil log = new LogUtil(getClass());

    @Override
    public void onReceive(Context context, Intent intent) {
        //过滤广播类型
        if (intent.getAction().equals("") {
          Intent intents=new Intent(context, MainActivity.class);
            Bundle bundle=new Bundle();
            bundle.putSerializable("key","value");
            intents.putExtras(bundle);
            context.startActivity(intents);
        }
    }
}

接收:

int position = getIntent().getExtras().getInt("position");

通信方式5:EventBus通信

EventBus注册销毁不在讲述

发送:

EventBus.getDefault().post(new ClickEvent(ClickEvent.Type.MOVE_LOGIN, null, 3));

ClickEvent

public class ClickEvent {
    public enum Type {}
    public Type type;
    public View view;
    public Object data;

    public ClickEvent(Type type, View view, Object data) {
        this.type = type;
        this.view = view;
        this.data = data;
    }

接收

  @Override
    public void onEventMainThread(final ClickEvent event) {
        switch (event.type) {
            case RECOMMEND_NEWS:
            case LOGINOUT:
                getWindow().getDecorView().post(new Runnable() {
                    @Override
                    public void run() {
                        adapter.selectTab((Integer) event.data);
                    }
                });
                break;
            case MOVE_LOGIN:
                RouteManager.getInstance().toLogin(this, (Integer) event.data);
                finish();
                break;
        }
    }

注意:EventBus通信必须是活动在堆栈中已经存在,否则会接收不到,EventBus也可以实现在适配器与活动的通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值