在ListFragment中设置所选项目的颜色?

时间:2012-08-21 07:09:25

标签: android android-listfragment

我的OnActivityCreated:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);

和onListItemClick:

public void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        DetailFragment fragment = (DetailFragment) getFragmentManager()
                .findFragmentById(R.id.detailFragment);
        if (fragment != null && fragment.isInLayout()) {
            v.setBackgroundColor(getResources().getColor(R.color.darkcherry));
            fragment.setText(item);
        }

通过执行此操作,所选项目将获得彩色背景,但随后选择另一项目,之前的选择不会消失。在我之前的问题中,提供的解决方案使用xml,但我还没有为listview定义xml,只定义了片段。 如何为选择(背景)着色?

链接到上一个问题:How to set color of selected item in ListFragment in android?

4 个答案:

答案 0 :(得分:1)

在support4库中的ListFragment示例中,他们通过 list row layout as checkable 来实现此类功能。

请查看my answerdemo project

答案 1 :(得分:0)

使用selector作为自定义行的背景:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/selected_row" />
    <item android:drawable="@drawable/normal_drawable" />
</selector>

当您点击列表中的元素时,请将您单击的行的状态设置为选中:

public void onListItemClick(ListView l, View v, int position, long id) {

        v.setSelected(true);

        String item = (String) getListAdapter().getItem(position);
        DetailFragment fragment = (DetailFragment) getFragmentManager()
                .findFragmentById(R.id.detailFragment);
        if (fragment != null && fragment.isInLayout()) {
            v.setBackgroundColor(getResources().getColor(R.color.darkcherry));
            fragment.setText(item);
        }

答案 2 :(得分:0)

您需要跟踪所选视图,以便在选择新视图时更改其颜色。

此外,保留此变量将允许您在旋转屏幕时跟踪选择(保存并恢复片段的状态)。

或者,如果您使用列表视图的selector属性,则可以将其设置为单选模式:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

创建片段。显然,你必须删除onListItemClick。

答案 3 :(得分:0)

尝试使用custom adapter,并在list item的布局中,将selector设置为背景可绘制。