2013-11-28 39 views
5

然後,我有一個ListView設定爲:performItemClick ListView中並不突出項目

<ListView 
    android:id="@+id/list_menu_nav" 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:choiceMode="singleChoice" 
    android:listSelector="#fff"> 
</ListView> 

適配器設置爲:

navMenu = (ListView) findViewById(R.id.list_menu_nav); 
navMenu.setAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, 
        menuList)); 

當我在一個項目觸及,它得到了白背景(如我設定)。但是,當我執行如下的項目點擊,它被選中,但沒有得到白色背景。

navMenu.performItemClick(navMenu.getChildAt(1), 1, navMenu.getAdapter().getItemId(1)); 

我知道這是因爲選擇了其他一切工作正常(偵聽器調用,getCheckedItemPosition返回正確的值)。

這種情況下正確的方法是什麼?替換爲自定義的佈局,並自己做高亮或有沒有一種方法使用相同的默認佈局?

+0

也許你在執行前點擊需要'invalidate'項目。 – Naddy

+0

我測試過它。它不起作用,在performClick之後'navMenu.invalidate()'和'navMenu.requestLayout()'。 :\ –

+0

@EugenMartynov據推測'listSelector'標記在列表中選擇的內容。遵循你所說的話,也許android團隊應該改變名稱爲'listSelectorForUserClicks'。 –

回答

1

你只TextView根據這個有:

因此,這是正常現象。您必須爲item元素創建自己的佈局以自定義所選狀態。看看這裏:

+0

你的回答是正確的,但它可以更好,我編輯但是被拒絕,因爲改變太多。我不同意,但它是stackoverflow協議。 –

1

setSelectionsetItemCheckedperformItemClick,延長ListView或任何你所想的事,是不可能的AbsListView使用私有方法來執行它,稱爲positionSelector。這只是在其他私有方法中調用,並在調用positionSelector之前檢查以確保有用戶交互。

你能做的唯一的解決方法是強制觸摸事件:

View temp = navMenu.getChildAt(1); 
navMenu.onTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), 
    SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, temp.getX(), temp.getY(), 0)); 
+0

多麼神奇。它有錯誤返回錯誤。但我圍繞着嘗試趕上..它爲我工作,例外.. –

相關問題