美文网首页
笔记:事物总线otto的简单用法

笔记:事物总线otto的简单用法

作者: 岁月无痕灬灬 | 来源:发表于2016-08-08 09:31 被阅读76次

    1.配置build.gradle(或直接导入jar包)

    在build.gradle中导入以下配置

    例如:

    dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.squareup:otto:1.3.5'
    }       
    

    2.创建一个单例的BusProvider(名字貌似可以自定义,不过要让自己和别人看的懂)

    public final class BusProvider {
    private static final Bus BUS = new Bus();
    
    public static Bus getInstance() {
        return BUS;
    }
    
    private BusProvider() {
        // No instances.
    }
    

    3.在需要使用的地方注册它,记得不用的时候取消注册

    @Override
    public void onStart() {
        super.onStart();
        BusProvider.getInstance().register(this);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        BusProvider.getInstance().unregister(this);
    }
    

    4.创建一个xxxEvent类,里面包含你要操作的数据类型

    例如:

        public class MessageEvent {
    
        public String message;
    
        public MessageEvent(String message) {
            this.message = message;
        }
        
        public String getMessage() {
            return message;
        }
      }
    

    5.在需要发送的消息的地方发送

     button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BusProvider.getInstance().post(dothing());
            }
        });
    

    6.写一个产生事件的公有的返回值为xxxEvent的方法并加上注解:@Produce

    @Produce
    public MessageEvent dothing() {
        return new MessageEvent(str.getText().toString());
    }
    

    7.在需要订阅的地方,也就是需要传值得地方写上一个公共方法并加上注解@Subscribe

    @Subscribe
    public void onEventMainThread(MessageEvent event) {
        text.setText(event.message);
    
    }
    

    在这个方法中处理传过来的值


    附上源代码:

    Activity代码如下

        public class MainActivity extends AppCompatActivity {
    
        private EditText str;
        private Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            str = (EditText) findViewById(R.id.str);
            button = (Button) findViewById(R.id.set);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    BusProvider.getInstance().post(dothing());
                }
            });
        }
    
    
        @Produce
        public MessageEvent dothing() {
            return new MessageEvent(str.getText().toString());
        }
    
        @Override
        public void onStart() {
            super.onStart();
            BusProvider.getInstance().register(this);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            BusProvider.getInstance().unregister(this);
        }
    }
    

    Fragment代码如下

        public class mainFragment extends Fragment {
        private TextView text;
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
            View view = inflater.inflate(R.layout.mian, container, false);
            text = (TextView) view.findViewById(R.id.text);
            return view;
        }
    
        @Subscribe
        public void onEventMainThread(MessageEvent event) {
            text.setText(event.message);
        }
    
        @Override
        public void onStart() {
            super.onStart();
            BusProvider.getInstance().register(this);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            BusProvider.getInstance().unregister(this);
        }
    }
    

    获取事物实例代码如下:

        public final class BusProvider {
        private static final Bus BUS = new Bus();
    
        public static Bus getInstance() {
            return BUS;
        }
    
        private BusProvider() {
            // No instances.
        }
    }
    

    事件类代码如下

    public class MessageEvent {
    
    public String message;
    
    public MessageEvent(String message) {
        this.message = message;
    }
    
    public String getMessage() {
        return message;
    }
    

    相关文章

      网友评论

          本文标题:笔记:事物总线otto的简单用法

          本文链接:https://www.haomeiwen.com/subject/ostrsttx.html