1

我的 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,只定义了片段。如何为选择(背景)着色?

链接到上一个问题:如何在 android 的 ListFragment 中设置所选项目的颜色?

4

4 回答 4

1

在 support4 库中的 ListFragment 示例中,他们通过制作list row layout as checkable.

请找到我的答案演示项目

于 2012-08-21T07:29:18.910 回答
0

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

<?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);
        }
于 2012-08-21T07:15:41.140 回答
0

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

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

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

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

关于片段的创建。显然,您必须删除 onListItemClick。

于 2012-08-21T07:21:52.553 回答
0

尝试使用自定义适配器,并在列表项的布局中,将选择器设置为背景可绘制对象。

于 2013-03-25T12:44:24.683 回答