您的位置:首页 > 移动开发 > Android开发

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.txt
 file中添加如下
-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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息