簡體   English   中英

為什么不是每個位置都調用 getView?

[英]Why isn't getView being called for every position?

我有一個用於 GridView 的簡單 BaseAdapter,當單擊網格中的單元格時,它當然會為網格中的每個位置調用 getView。 在大多數情況下,getView 會為視圖中的每個位置調用(應該如此),但有時只為第一個位置調用它。 我需要為視圖中的每個位置調用此方法,以便突出顯示選定的單元格並取消突出顯示其他單元格,但由於不是為每個位置調用它,因此它不會取消突出顯示未選定的單元格。

獲取視圖方法:

class AdapterSelectReference(context: Context, list: List<String>) : BaseAdapter()
{
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View
    {
        Logger.log(C.LOG_I, "~*ADAPTER_SELECT_REFERENCE", object{}.javaClass.enclosingMethod?.name + ": start: position = " + position)

        val view: View
        val lrh: ListRowHolder
        if(convertView == null)
        {
            view = this.mInflator.inflate(R.layout.grid_cell_layout, parent, false)
            lrh = ListRowHolder(view)
            view.tag = lrh
        }
        else
        {
            view = convertView
            lrh = view.tag as ListRowHolder
        }
        lrh.label.text = list[position]
        if(position != Settings.referenceSelected.book)
            lrh.label.setBackgroundColor(Color.parseColor("#ffffff"))
        else
            lrh.label.setBackgroundColor(Color.parseColor("#E0E7E7"))
        return view
    }
}

活動:

class ActivitySelectReference : AppCompatActivity()
{
    lateinit var gvBooks: GridView
    lateinit var adapterBooks: AdapterSelectReference
    lateinit var listBooks: List<String>

    override fun onCreate(savedInstanceState: Bundle?)
    {
        listBooks = resources.getStringArray(R.array.bible_books).toList()
        gvBooks = findViewById(R.id.references_grid_view_books) as GridView
        adapterBooks = AdapterSelectReference(this, listBooks)
        gvBooks.setAdapter(adapterBooks)
        ...
    }   
...
}

在某個觸摸上調用僅顯示位置 0 的日志打印輸出:

2020-01-15 09:23:16.376 26646-26646/com.samuelriesterer.custombiblereadingplan I/~*ADAPTER_SELECT_REFERENCE: getView: start: position = 0
2020-01-15 09:23:16.393 26646-26646/com.samuelriesterer.custombiblereadingplan I/chatty: uid=10283(u0_a283) com.samuelriesterer.custombiblereadingplan identical 1 line
2020-01-15 09:23:16.399 26646-26646/com.samuelriesterer.custombiblereadingplan I/~*ADAPTER_SELECT_REFERENCE: getView: start: position = 0

而不是將背景顏色設置為TextView ,而是在view設置

if(position != Settings.referenceSelected.book)
    view.setBackgroundColor(Color.parseColor("#ffffff"))
else
    view.setBackgroundColor(Color.parseColor("#E0E7E7"))

這將解決突出顯示/不突出顯示的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM