Как изменить изображение imageButton в PopupWindow с помощью слушателя onClick? - PullRequest
0 голосов
/ 14 апреля 2019

Я создаю очень простое приложение для дел в Android Studio. Когда пользователь добавляет новое задание, я хочу, чтобы он выбрал одну категорию из дома / работы / деятельности. Для этого я добавил PopupWindow к своему основному макету и добавил внутрь 3 imageButtons, представляющих категории. Дом выбран по умолчанию, и когда пользователь хочет выбрать другой, houseButton меняет свое изображение на «пустое», а другая кнопка меняет свое изображение на «выбранный»

Из того, что я нашел в интернете, я пытался использовать view.invalidate() и view.postInvalidate() на imageButtons, но ничего не происходит. Я также попытался охватить весь блок в runOnUiThread {}, но он также ничего не сделал.

Слушатель, который не работает:

fun swapActivity(view: View) {
    houseButton.setImageResource(R.drawable.houseempty)
    workButton.setImageResource(R.drawable.workempty)
    activityButton.setImageResource(R.drawable.activityempty)
    when (view) {
        houseButton -> {
            houseButton.setImageResource(R.drawable.house)
            selectedActivity = "house"
        }
        workButton -> {
            workButton.setImageResource(R.drawable.work)
            selectedActivity = "work"
        }
        aActivity -> {
            activityButton.setImageResource(R.drawable.activity)
            selectedActivity = "activ"
        }
    }
}

Кнопка в основном макете, которая показывает PopupWindow:

var shown = false
button.setOnClickListener{
    if(!shown) {
        shown = true
        val inflater: LayoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val view = inflater.inflate(R.layout.new_todo, null)
        val popupWindow = PopupWindow(
            view,
            LinearLayout.LayoutParams.MATCH_PARENT, 
            LinearLayout.LayoutParams.WRAP_CONTENT
        )
        //imageView inside popup that hides it
        val buttonPopup = view.findViewById<ImageView>(R.id.imageCancel)
        buttonPopup.setOnClickListener {
            popupWindow.dismiss()
            shown = false
        }
        TransitionManager.beginDelayedTransition(mainLayout)
        popupWindow.showAtLocation(
            mainLayout, // Location to display popup window
            Gravity.BOTTOM,
            0,
            0
        )
    }
}

Всплывающий файл XML (new_todo):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#ffffff">">
        <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/cancel" 
                android:id="@+id/imageCancel"/>
        <ImageButton
                android:background="@null"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                app:srcCompat="@drawable/activity"
                android:id="@+id/activityButton" 
                android:onClick="swapActivity"/>
        <ImageButton
                android:background="@null"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                app:srcCompat="@drawable/workempty"
                android:id="@+id/workButton"
                android:onClick="swapActivity"/>
        <ImageButton
                android:layout_width="wrap_content" android:background="@null"
                android:layout_height="wrap_content" 
                app:srcCompat="@drawable/house"
                android:id="@+id/houseButton"
                android:onClick="swapActivity"/>
</LinearLayout>

Редактировать: Решено. Я удалил всю функцию swapActivity и добавил следующие строки в прослушиватель основной кнопки:

val houseButton1 = view.findViewById<ImageButton>(R.id.houseButton)
val workButton1 = view.findViewById<ImageButton>(R.id.workButton)
val activityButton1 = view.findViewById<ImageButton>(R.id.activityButton)

houseButton1.setOnClickListener {
    houseButton1.setImageResource(R.drawable.house)
    workButton1.setImageResource(R.drawable.workempty)
    activityButton1.setImageResource(R.drawable.activityempty)
    selectedActivity = "house"
}
//repeat for all buttons
...