안드로이드 안에 있는 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에 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
}
}
안에 내용이 필요하면 있어도 되고 없어도 된다.
@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를 통해 받아준다.