我正在为ListView使用自定义适配器,该适配器显示可以单击的项目列表,并且应该更改ListView下面的描述TextView的文本。描述应显示有关当前突出显示的项目的描述性文本。
在包含ListView和TextView的Fragment中,我使用以下代码注册OnItemClickListener
Java代码:
mTextView = (TextView) myParentView.findViewById(R.id.fragment_select_option_desc_text_view);
mListView = (ListView) myParentView.findViewById(R.id.fragment_select_option_list_view);
mListView.setItemsCanFocus(false);
mListView.setAdapter(new MyItemAdapter(getActivity(), mItems));
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
int itemId = SelectStateFragment.this.mItems[position].getId();
String description = DataStore.get().getItemDescription(itemId);
SelectItemFragment.this.mTextView.setFocusable(true);
SelectItemFragment.this.mTextView.setText(Html.fromHtml(description));
SelectItemFragment.this.mSelectedPosition = position;
view.setSelected(true);
}
});
片段xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/fragment_select_option_list_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/list_view_background" >
</ListView>
<ScrollView
android:id="@+id/fragment_select_option_scroll_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:stackFromBottom="true"
android:choiceMode="singleChoice"
android:fillViewport="false" >
<TextView
android:id="@+id/fragment_select_option_desc_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3sp" />
</ScrollView>
</LinearLayout>
项目xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/selectable_item_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="3sp"
android:textColor="@android:color/black"
android:focusable="false"
android:focusableInTouchMode="false"
android:background="@drawable/selectable_item_background"/>
</RelativeLayout>
问题是:点击某个项目后,文本视图内容会按预期更新。但是,我没有在列表视图中看到所选项目的任何视觉突出显示。只有当我第二次点击相同的项目时,我的选择才会在项目突出显示时变得可见。奇怪的是:如果我注释掉这一行
SelectItemFragment.this.mTextView.setText(Html.fromHtml(description));
因此跳过TextView的更新,选择会立即显示第一个项目。
访问OnItemClickListener中的其他UI元素有什么问题吗?更新TextView后,是否必须触发一些布局更新?
更新:在我的代码中添加了Sweety的建议,添加了XML代码
答案 0 :(得分:0)
尝试将列表视图中的所有项目设置为不可聚焦。
final ListView list =(ListView)findViewById(R.id.list); list.setItemsCanFocus(假);
另外,请确保列表项目内的项目设置为focusable false
机器人:可聚焦=&#34;假&#34;
机器人:focusableInTouchMode =&#34;假&#34;
在setText之前也是view.setFocusable(true)
。