Как установить высоту выпадающего списка на основе его родителя? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть фрагмент диалога, который расширен с SupportBlurDialogFragment(), и в этом представлении у меня есть несколько фрагментов, и в одном из этих фрагментов мне нужно открыть счетчик. Моя проблема в том, что когда у меня маленький диалог, я не вижу весь свой элемент в выпадающем меню. это мой фрагмент фрагмента диалога, в котором я открываю только свой фрагмент:

class MyDialogFragment : SupportBlurDialogFragment() {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        tourReserve = TourReserve.getInstance()
        this.dialog!!.window!!.decorView.setBackgroundResource(android.R.color.transparent)
        val ft = childFragmentManager.beginTransaction()
        ft.replace(R.id.containerRegisterTour, SpinnerContainerFragment.newInstance())
        ft.commit()
    }
}

, а это мой SpinnerContainerFragment класс:

class SpinnerContainerFragment : Fragment() {

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_spinner_container, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    // set up spinner data and adapter and click listener
    val spinnerData: ArrayList<String> = ArrayList()
    for (count in 1..20) {
        spinnerData.add(count.toString())
    }
    spinnerData.add("people count")
    val adapter = SpinnerAdapter(context, spinnerData, R.layout.simple_custom_spinner_item)
    adapter.setDropDownViewResource(R.layout.simple_custom_spinner_dropdown_item)
    peopleCountTourReg.adapter = adapter
    peopleCountTourReg.setSelection(adapter.count)
    peopleCountTourReg.onItemSelectedListener =
        object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(p0: AdapterView<*>?) {
            }
            override fun onItemSelected(
                p0: AdapterView<*>?,
                p1: View?,
                p2: Int,
                p3: Long
            ) {
                if ((p2+1) != spinnerData.size) {
                    //some code here after selection
                }
            }
        }

    }
}

, что я пробовал до сих пор:

Я попытался установить ограничение для высоты dropDow в счетчике, как показано ниже, но оно не сработало:

    try {

       val popup = Spinner::class.java.getDeclaredField("mPopup")
       popup.isAccessible = true
        // Get private mPopup member variable and try cast to ListPopupWindow
       val popupWindow = popup.get(peopleCountTourReg) as android.widget.ListPopupWindow

        // Set popupWindow height to 50px
        popupWindow.height = 50
    } catch (e: NoClassDefFoundError) {
        // silently fail...
    } catch (e: ClassCastException) {
    } catch (e: NoSuchFieldException) {
    } catch (e: IllegalAccessException) {
    }

как я могу показать все данные в моем счетчике? я должен получить родительскую высоту счетчика и установить ее для высоты выпадающего меню?

...