单击时如何处理布局更改

时间:2014-05-04 21:15:18

标签: android android-listview android-custom-view

我已经扩展了Android ListView组件,以便在点击它们时更改其列表项,并默认选择第一项。

问题是,当通过添加OnItemClickListener更改列表项时,当活动覆盖它时不会触发此事件。无论事件是否被覆盖,如何将此行为设置为始终发生?

关于上述内容,我还希望在初始化时将这些更改添加到列表中的第一项(作为默认选择)。我一直在寻找解决方案。我尝试过的一些内容包括尝试setSelection(0)setSelected(true)setActivated(true)setItemChecked(0, true)。我也一直在尝试使用performClick(),但这会让NullPointerException成为现实。 为了表示点击,我使用StateListDrawable作为android:background添加到列表项。

StateListDrawable:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:exitFadeDuration="@android:integer/config_longAnimTime">
    <item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"/>
    <item android:drawable="@color/list_active" android:state_selected="true"/>
    <item android:drawable="@color/list_active" android:state_activated="true"/>
    <item android:drawable="@color/list_active" android:state_checked="true"/>
    <item android:drawable="@color/list_background"/>
</selector>

还应该注意的是,我正在为listview使用自定义适配器,即使除了向列表项添加内容之外没有做任何其他事情。

自定义列表视图代码的简短摘录:

public class ShadowListview extends ListView {

    public ShadowListView(Context context) {
        super(context);
        init();
    }

    ...

    private void init() {
        setOnItemClickListener(new ShadowListViewClicker());
    }

    private class ShadowListViewClicker implements OnItemClickListener {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // Handling changes to items here
            ...
        }
    }

}

我非常感谢任何对我的问题的帮助,因为我开始松开我的头发:)

1 个答案:

答案 0 :(得分:0)

我会在适配器中处理它,维护一个表示所选索引的整数,默认为0.如果索引与所选索引匹配,则修改getView以不同的方式呈现视图。在适配器中提供将更新所选索引的公共setSelected(int)方法,并调用notifyDataSetChanged()刷新列表。在适配器上的onItemClick方法调用setSelected中。