Otto的使用

Otto是一个在Android中的事件总线框架,它是square的一个开源框架


Otto事件总线

Otto中真正用到的就只有一个类两个注解三个方法:

  1. Bus - 管理注册、注销和发布事件
  2. @Produce - 标记该方法是生产者,产生的事件内容为该方法的返回值
  3. @Subscribe - 标记该方法是订阅者,表示订阅了一个事件,方法需要修饰符为public,而区分不同的订阅者是通过方法的参数来区分的,且订阅了某事件的所有订阅者都可以收到该事件
  4. register(Object obj) - 注册,订阅事件前都需要注册
  5. unregister(Object obj) - 注销,放弃之前所有事件的订阅
  6. post(Object event) - 发布一个事件,这个事件会被所有标记了@Subscribe注解的方法获得

使用Otto事件总线

首先添加依赖:
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
   compile files('libs/volly-1.0.11.jar')
    compile 'com.squareup:otto:1.3.8'
}

为Bus创建一个单例对象

public class BusProvider {

    private static Bus bus;

    public static Bus getInstance(){
        if (bus == null){
            synchronized (BusProvider.class) {
                bus = new Bus();
            }
        }
            return bus;

    }
}

创建一个Bean,用来传递各类间的数据

public class EventData {

    private String content;

    public EventData() {
    }

    public EventData(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

在MainActivity中注册并且创建订阅者订阅数据

public class MainActivity extends AppCompatActivity {

    private TextView tvShow;
    private Button btnJump;

    private void init(){
        tvShow= (TextView) findViewById(R.id.tvShow);
        btnJump = (Button) findViewById(R.id.btnJump);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BusProvider.getInstance().register(this);
        setContentView(R.layout.activity_main);
        this.init();
        btnJump.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(),SecondActivity.class));
            }
        });
    }

    @Subscribe
    public void subscribeEvent(EventData data){
        Log.e("L",data.getContent());
        tvShow.setText(data.getContent());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        BusProvider.getInstance().unregister(this);
    }
}
通过post()来发布事件,它不需要注册和注销,而且它不会在界面跳转时马上发布事件,而是我们人为的控制该事件什么时候发布
public class SecondActivity extends AppCompatActivity {

    private EditText etInput;
    private Button btnBack;
    String content;

    private void init(){
        etInput = (EditText) findViewById(R.id.etInput);
        btnBack = (Button) findViewById(R.id.btnBack);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);
        this.init();
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                content = etInput.getText().toString();

                if(content != null){
                    EventData data = new EventData();
                    data.setContent(content);
                    BusProvider.getInstance().post(data);
                    finish();
                }else{
                    return;
                }
            }
        });
    }


}

OK..

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值