otto框架简单的使用(个人笔记)

来源:互联网 发布:相貌评分软件 编辑:程序博客网 时间:2024/06/08 17:15

转:http://android.jobbole.com/82217/

1、Activity与Activity间的传值是通过Intent,值回调是通过startActivityForResult()
2、Activity与Fragment间的传值是通过setArguments,值回调是通过实现onAttach()的Interface方式
3、而Fragment与Fragment间的交互则应该是通过它们关联的Activity作为中间键来交互
4、包括Activity与Service的交互,可能众多同学会采用Binder机制来处理,而其实Binder机制本质也是通过接口回调方式来进行值回调的
5、或者在更复杂的应用场景下,比如:ActivityA跳转到ActivityB,ActivityB跳转到ActivityC,此时需要从ActivityC中获取到用户的操作数据返回到ActivityA和ActivityB中显示,或者在Activity中有多个Fragment,其中一个Fragment里的数据变化需要同步更新其它Fragment的数据变化,这时候如果使用Interface的方式进行它们间的交互则比较复杂,耦合度也高 所以,针对上面这些问题,大多数在处理值交互的问题上类之间都是耦合在一起的,而Otto事件总线框架就是降低各个类间的耦合度的。(方便解决Activity与Activity,Fragment,Service数据的传递与交互中所遇到的复杂问题

使用otto框架要添加依赖

compile 'com.squareup:otto:1.3.8'
建立个实体类用来传递各数据(这里只传String)
public class BusData {    public  String messege;    public BusData(String messege) {        this.messege = messege;    }    public String getMessege() {        return messege;    }    public void setMessege(String messege) {        this.messege = messege;    }}
创建个 单例对象
public class OttoBus extends Bus {      private  volatile  static  OttoBus bus;    public OttoBus() {    }    public  static  OttoBus getInstance(){          if (bus==null){              synchronized (OttoBus.class){                  if (bus==null){                      bus =new OttoBus();                  }              }          }        return bus;    }}
MainActivity 类:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button mBt_jump;    private TextView mTv_messge;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);           OttoBus.getInstance().register(this);//注册订阅事件          mBt_jump = (Button) findViewById(R.id.bt_jump);        mTv_messge=(TextView) findViewById(R.id.tv_messge);        mBt_jump.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case  R.id.bt_jump:                Intent intent=new Intent(MainActivity.this,ThereActivity.class);                startActivity(intent);                break;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        OttoBus.getInstance().unregister(this);//取消订阅事件    }      @Subscribe      //接收处理事件    public  void setContent(BusData data){          Log.i("BusData","BusData==="+data.getMessege());      mTv_messge.setText(data.getMessege());  }}
跳转
ThereActivity类
public class ThereActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.thereactivity);        findViewById(R.id.bt_back).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {              OttoBus.getInstance().post(new BusData("数据送出在第一页接收到"));//发出信息数据                finish();            }        });    }}


原创粉丝点击