2009-02-21 128 views
3

上下文: 我想要一个不会获得焦点的ListView(例如,当用户触摸它时,不会突出显示行 )。然而,每行小部件都有自己的 OnClickListener。 这是我在布局XML注明:ListView中的焦点控制

android:choiceMode="none" 
android:focusableInTouchMode="false" 
android:focusable="false" 

ListView控件仍行为如出一辙。 可能有人请解释

  1. 三个
  2. 什么是创建不接收焦点一个ListView的正确方法之间的相互关系?

TIA。

+0

嗨Quintin。我有同样的问题。你找到答案了吗? – pocoa 2010-11-25 04:26:29

+0

两个最佳解决方案http://stackoverflow.com/questions/2098558/listview-with-clickable-editable-widget/27898369#27898369 – Nepster 2015-01-12 09:04:59

回答

2

接收焦点的列表与选定的行不突出显示不同。只要用户在其中,该列表就会获得焦点。 ListView能够做的最好的是报告一个int用于用户选择的任何东西。我不确定每个行窗口小部件是如何拥有它自己的ClickListener的。没有我知道的行小部件。 onListItemClick属于ListView。

我还没有弄明白,但是在android:listSelectorandroid:background之间,并且调整了alpha通道,我认为会有一种方法可以让选择看起来像一个非选定的行。

android:listSelector="#8fff"使得它只是在选择前景变化。

看起来像android自己选择非选定的前景,这使得这很难。我希望这有帮助。

+1

事实上,当你将这些属性设置为“@android:color/transparent”时,没有视觉指示元素是否被选择。 – Nappy 2012-10-15 15:51:23

6

尽管你在xml中指定了,你也可以尝试在代码中指定。虽然我不确定你可以设置一个列表不可调焦,并且仍然可以滚动列表并且可点击。

您的setContentView后...

myListView.setFocusableInTouchMode(false); 

你可以尝试从视图继承以及然后在临时加少许调试代码,以帮助您找到当列表实际上具有焦点。

myListView.setOnFocusChangeListener(new OnFocusChangeListener(){ 

     public void onFocusChange(View v, boolean hasFocus) 
     { 
      v.setBackgroundColor(hasFocus ? Color.GRAY : Color.BLACK); 
     } 
    }); 

    myListView.setClickable(true); 
0

不能用用户触摸列表上的行时选择的RadioButton吗?

以下是我自己的代码摘录。

// Create an adapter with a simple list item with single choice. 
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, categories); 

// Set the adapter to your list 
listView.setAdapter(adapter); 

干杯!