在ListView中单击项目时更改外部TextView的内容

时间:2014-07-17 09:18:00

标签: android listview onitemclicklistener

我正在为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代码

1 个答案:

答案 0 :(得分:0)

尝试将列表视图中的所有项目设置为不可聚焦。

final ListView list =(ListView)findViewById(R.id.list); list.setItemsCanFocus(假);

另外,请确保列表项目内的项目设置为focusable false

机器人:可聚焦=&#34;假&#34; 机器人:focusableInTouchMode =&#34;假&#34;
在setText之前也是view.setFocusable(true)