안드로이드 0216

박태욱·2022년 2월 16일

Toolbar

안드로이드 안에 있는 actionbar 사용 하지마라

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/white">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="start|center_vertical">
            <LinearLayout
                android:id="@+id/back_btn"
                android:layout_width="60dp"
                android:layout_height="match_parent"
                android:gravity="center">
                <ImageView
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:src="@drawable/ic_arrow_back"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="start|center_vertical">
                <ImageView
                    android:layout_width="87dp"
                    android:layout_height="24dp"
                    android:src="@drawable/logo"/>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

이렇게 LinearLayout만 사용하고 imageView 안에는 다른 LinearLayout 들어올 수 없다.

android:id="@+id/back_btn"
아이디 확인 잘하고

binding.backBtn.setOnClickListener(this)

바인딩 해주고

    override fun onClick(v: View?) {
        if(v!!.equals(binding.backBtn))
        {
            finish();
        }
    }

이런 식으로 하면 팝업창이 꺼지게 되고 뒤로가게 된다.

EventBus

이벤트버스 활용하기
이벤트버스란 아무조건 없이 어디서든 클래스 단위로 이벤트를 던질 수 있다.
이벤트를 수신 받기 원하는 곳을 eventbus에 register 해두면 이벤트를 수신 받을 수 있다.
이벤트를 더 이상 받고 싶지 않다면 unregister 한줄만 해주면된다.

vidascmforandroid
1. MainShowFragmentEvent.kt 생성

package com.nodeground.eventbus

import androidx.fragment.app.Fragment

class MainShowFragmentEvent {
    var bottom_index = 0
    var viewpager_index = 0
    var data = ""
    var type = "main"
    var fragment: Fragment? = null

    constructor(fragment: Fragment?, bottom_index: Int, viewpager_index: Int, data: String, type: String) {
        this.bottom_index = bottom_index
        this.viewpager_index = viewpager_index
        this.data = data
        this.type = type
        this.fragment = fragment
    }
}

안에 내용이 필요하면 있어도 되고 없어도 된다.

  1. MainActivity.kt
    @Subscribe(threadMode = ThreadMode.POSTING)
    fun onMainShowFragmentEvent(event: MainShowFragmentEvent?) {
        if(event!!.type == "main")
        {
            show(event.fragment!!, event.bottom_index, event.viewpager_index)
            binding.drawerLayout.closeDrawer(GravityCompat.START)
        }
        else if(event!!.type == "order")
        {
            show_fragment(event.fragment!!, event.data)
            binding.drawerLayout.closeDrawer(GravityCompat.START)
        }
    }

subscribe을 작성하여 수신한다.

3.HomeFragment.kt

    private class AndroidBridge internal constructor() {
        @JavascriptInterface
        fun callOpenOrderProcess(orderstate: String?) {
            var orderProcessFragment = OrderProcessFragment()
            EventBus.getDefault().post(MainShowFragmentEvent(orderProcessFragment, 0, 0, orderstate!!, "order"))
        }

HomeFragment안에 수신한 값을 post를 통해 받아준다.

profile
개발 노트

0개의 댓글