3

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

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

ListView 的行为仍然完全相同。有人可以解释一下吗

  1. 三者之间的相互关系
  2. 创建没有获得焦点的 ListView 的正确方法是什么?

TIA。

4

3 回答 3

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);
于 2009-02-21T04:18:36.667 回答
2

接收焦点的列表与未突出显示的选定行不同。只要用户在列表中,列表就会获得焦点。ListView 可以做的最好的事情是报告int用户选择的任何内容。我不确定每个行小部件如何拥有自己的 ClickListener。没有我知道的行小部件。onListItemClick属于ListView 。

我还没有弄明白,但是在调整 alpha 通道之间android:listSelectorandroid:background我想有一种方法可以使选择看起来就像一个未选择的行。

android:listSelector="#8fff"使它成为选择时的前景变化。

似乎android自己选择了未选择的前景,这使得这很难。我希望这有帮助。

于 2009-02-21T04:13:09.410 回答
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);

干杯!

于 2012-08-09T11:18:54.630 回答