1

这是活动

public void onListItemClick(ListView parent, View v,int position, long id) {
        String str;

        if (nRowSelected>=0) {
            View row=parent.getChildAt(nRowSelected);
            if (row!=null) {
                row.setBackgroundColor(0xFFFFFFFF);
            }
        }
        nRowSelected=position;

        v.setBackgroundColor(Color.GRAY);
    }//onListItemClick

这是我的列表视图

        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="425dp" 
            >
        </ListView>

我需要突出显示单选。我选择/关注第 1 行。但是当我滚动时,焦点不止一个。第 8 行的行焦点也是

这是捕获

图 1

图片2

如何解决?

4

4 回答 4

2

您正在与适配器回收行布局的方式作斗争...您需要扩展当前的适配器并覆盖getView()以突出显示正确的行(并且只有正确的行)。

在最基本的层面上,它看起来像:

public View getView(...) {
    View view = super.getView(...);

    if(position == mRowSelected) {
        view.setBackgroundColor(Color.GRAY);
    }
    else { // You must use a default case to "un-highlight" the reused layout
        view.setBackgroundColor(0xFFFFFFFF);
    }
    return view;
}
于 2013-01-22T04:55:55.243 回答
2

将此添加到 xml:

android:cacheColorHint="#00000000"
于 2013-01-22T05:00:07.407 回答
0

用以下代码替换您的xml代码::

<ListView
   android:id="@android:id/list"
   android:layout_width="match_parent"
   android:layout_height="425dp" 
   android:cacheColorHint="#00000000">
</ListView>
于 2013-01-22T05:06:05.690 回答
0

嗨,请参阅下面的代码可能会有所帮助,它是单选选择示例,请按照此操作很好。

public class List17 extends ListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Use the built-in layout for showing a list item with a single
    // line of text whose background is changes when activated.
    setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_activated_1, mStrings));
    getListView().setTextFilterEnabled(true);

    // Tell the list view to show one checked/activated item at a time.
    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    // Start with first item activated.
    // Make the newly clicked item the currently selected one.
    getListView().setItemChecked(0, true);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // Make the newly clicked item the currently selected one.
    getListView().setItemChecked(position, true);
}

private String[] mStrings = Cheeses.sCheeseStrings;

}

这是列表活动,您有列表视图或列表活动并不重要。

于 2013-01-22T05:52:01.777 回答