3

我有一个带有自定义适配器的 ListView。其中的每个项目都包含一个 TextView。

<TextView
    android:id="@+id/chat_name"
    android:layout_height="48dp"
    android:layout_width="match_parent"
    android:textColor="#FFFFFF"
    android:gravity="center_vertical"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:singleLine="true"
    android:focusable="false"
    android:focusableInTouchMode="false"/>

我需要这个 TextView 不可聚焦,因为我依赖于该onListItemClick()方法。据我所知,onListItemClick()如果你设置就不会开火focusable="true"

在我设置的适配器中:

TextView chatName = (TextView) v.findViewById(R.id.chat_name);
chatName.setText(chat.getChatName());
chatName.setSelected(true);

它每次都有效,但第一次有效。当一个项目被添加到适配器时,它会显示在列表视图中,但它没有被选中。单击项目时,将显示另一个活动。用户返回 ListView 后,item 突然被选中。我希望它一直被标记。

我已经尝试使用覆盖isFocused()以始终返回 true 的方法对 TextView 进行子类化,但这并没有帮助。行为保持不变。我还尝试了各种值focusablefocusableInTouchMode属性,但没有成功。

4

2 回答 2

6

请使用 requestFocus() 函数如下。

chatName.setSelected(true);
chatName.requestFocus();

我会工作。

于 2012-12-13T07:10:32.607 回答
4

在您的自定义适配器中,将其添加到 getView 中:

chatName.addOnLayoutChangeListener(new OnLayoutChangeListener() 
{
    @Override
    public void onLayoutChange(View v, ....) 
    {
        chatName.setSelected(true);
    }
});
于 2013-09-29T15:36:07.130 回答