[Android] Otto ตัวช่วยส่งข้อมูลผ่าน event bus

อย่างที่รู้กันในหมู่ Android Developer ว่า การคุยกันระหว่าง Activity กับ Fragment นั้นไม่ง่ายเลย แต่บทความนี้ผมจะยังไม่อธิบายว่าแตกต่างกันอย่างไร (ถ้าใครใจร้อนมี link ให้ครับ http://developer.android.com/guide/components/fragments.html)

วิธีพื้นบ้าน (No lib.)

เตรียมพร้อมด้วย communication interface ก่อน
    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Data data);
    }

การใช้งานใน Fragment Class
    OnFragmentInteractionListener mListener;
    ...
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mListener = (OnFragmentInteractionListener) activity;

    }
    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

ทำการส่งค่าจาก Fragment ไปยัง Activity
    @Override
    public void onClick(View v) {
        mListener.onFragmentInteraction(data);
    }

และอย่าลืมว่าต้อง implement method ใน Activity Class ด้วย
    public void onFragmentInteraction(Data data) {
        // Do something with Activity
    }


โค้ดมาซะเยอะ ยังไม่มีอะไรเกี่ยวกับ Otto เลยยย จากโค้ดด้านบนเราก็จะเปลี่ยนมาใช้ Otto กันบ้าง

Otto

setup library ที่ gradle กันก่อน
    compile 'com.squareup:otto:1.3.8'

การใช้งานใน Activity / Fragment Class
    @Override
    protected void onResume() {
        super.onResume();

        // Register ourselves so that we can provide the initial value.
        BusProvider.getInstance().register(this);
    }

    @Override
    protected void onPause() {
        super.onPause();

        // Always unregister when an object no longer should be on the bus.
        BusProvider.getInstance().unregister(this);
    }

การส่งค่า
    @Override
    public void onClick(View v) {
        BusProvider.getInstance().post(data);
    }

การรับค่า
    @Subscribe
    public void onObjectSubscribed(Data data) {

    }

    @Subscribe
    public void onStringSubscribed(String data) {

    }

Class ที่จะใช้งาน otto ได้ต้องทำการ register() ก่อน เมื่อมีการเรียก post() ก็จะมีการส่งค่าไปยัง method ทุกตัวที่ parameter type ตรงกัน เท่านี้เราก็จะได้ข้อมูลไปใช้งานต่อแล้วครับ ถ้าลองเอาไปใช้งานจริง จะพบว่า source code ของเราสะอาดตาขึ้นพอควร และยังเข้าใจได้ง่ายกว่าด้วยครับ

official site : http://square.github.io/otto/

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง