Android事件总线 Otto框架使用
2016-08-16 19:59
513 查看
事件总线 Otto框架官网地址:http://square.github.io/otto/[b]一、介绍[/b] Otto是一个事件总线设计中分离出的应用程序的不同部分,同时仍然允许他们有效的沟通。它增加了独特的功能,已经细分事件总线,以及它专门为Android平台。-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------二、用法 (2.1) Eclipse直接下载jar架包(http://square.github.io/otto/);(2.2) Android Studio中在Build.grade中添加如下:
dependencies {compile 'com.squareup:otto:1.3.8' //Otto事件总线 http://square.github.io/otto/ }
proguard-project.txtfile中添加如下
-keepattributes *Annotation* -keepclassmembers class ** { @com.squareup.otto.Subscribe public *; @com.squareup.otto.Produce public *; }----------------------------------------------------------------------------------------------------------------------------------------------------------------------------三、代码部分
/** *创建AppBus */ public class AppBus extends Bus { private static AppBus bus; public static AppBus getInstance(){ if (bus == null){ bus = new AppBus(); } return bus; } }
/***普通的Java Bean<4000/em>*/public class BusEventData {private String content;public BusEventData(String content) {this.content = content;}// Command+N Getter and Setterpublic String getContent() {return content;}public void setContent(String content) {this.content = content;}}
package com.carzone.ottodemo;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.widget.Button;/*** 应用场景:通过Activity修改Fragment里面的数据,或者通过Fragment修改Activity里的数据**/public class MainActivity extends Activity {private Button btn1,btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findviews();init();addListener();}private void findviews() {btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);}private void init() {FragmentManager manager = getFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.replace(R.id.fragment_layout,TestFragment.getInstance());transaction.commit();}private void addListener() {btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {AppBus.getInstance().post(new BusEventData("niu menglin"));}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {AppBus.getInstance().post("hello");}});}@Overrideprotected void onResume() {super.onResume();// AppBus.getInstance().register(this);}@Overrideprotected void onPause() {super.onPause();// AppBus.getInstance().unregister(this);}}
package com.carzone.ottodemo;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.EditText;import com.squareup.otto.Subscribe;/*** Created by niumenglin on 16/8/16.*/public class TestFragment extends Fragment {private EditText et;private View view;public static TestFragment getInstance() {TestFragment testFragment = new TestFragment();return testFragment;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// return super.onCreateView(inflater, container, savedInstanceState);view = inflater.inflate(R.layout.fragment_test, container, false);findviews();return view;}private void findviews() {et = (EditText) view.findViewById(R.id.et);}@Overridepublic void onStart() {super.onStart();//1.注册到bus事件总线中AppBus.getInstance().register(this);}@Overridepublic void onStop() {super.onStop();//2.取消注册AppBus.getInstance().unregister(this);}/*** [定义订阅者],Activity中发布的消息,在此处会接收到,* 在此之前需要先在程序中register,看上面的onStart和onStop函数* @param data** 方法用@Subscribe注解标志,表示此方法可以接收到数据的变化,对应的参数是BusEventData类型*/@Subscribepublic void setContent(BusEventData data) {et.setText(data.getContent());}/*** 方法用@Subscribe注解标志,表示此方法可以接收到数据的变化,对应的参数是String类型* @param data*/@Subscribepublic void setCon(String data) {et.setText(data);}@Subscribepublic void onDataChange(String sss) {System.out.println("====" + sss);}}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="Button 1" /><Buttonandroid:id="@+id/btn2"android:layout_width=[b]"match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="Button 2" /><LinearLayoutandroid:id="@+id/fragment_layout"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginTop="10dp"android:layout_weight="1"android:orientation="horizontal" /></LinearLayout>
fragment_test.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- option + command +L 格式化--><EditTextandroid:id="@+id/et"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
相关文章推荐
- Android事件总线框架Otto使用
- android中Otto事件总线框架的使用
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之第三方框架集成Otto事件总线(十四)
- Android学习系列(43)--使用事件总线框架EventBus和Otto
- Android开源框架——事件总线otto
- Otto事件总线框架的使用
- Android事件总线分发库的使用EventBus(和Otto一样,只是效率高点)
- 使用事件总线框架EventBus和Otto
- 使用事件总线框架EventBus和Otto
- 使用事件总线框架EventBus和Otto
- Android学习系列(43)--使用事件总线框架EventBus和Otto
- Otto事件总线框架的使用(一)
- Android开发之浅谈事件总线框架EventBus和Otto
- Android 事件总线Otto使用入门一
- Android 事件总线Otto框架详解二
- Android 事件总线OTTO使用说明和源码解析
- android事件总线 otto使用
- Otto事件总线框架的使用
- 事件总线分发库EventBus框架的简单使用