如何简要突出显示ListActivity中的行?

时间:2013-09-14 10:58:17

标签: android

我在派生的ListActivity中显示一个使用自定义ListAdapter的事件列表。我有一个“今天”按钮,我想把我带到今天最接近的事件 - 很容易 - 我只需要调用setSelection(n)。

然后我想简要地突出显示或闪现或以某种方式吸引用户注意该项目 - 只要足够长以便他们可以看到最接近今天的项目

原因是,如果在屏幕上可以看到10个项目,例如100个项目列表中的任何一个,那么您是否已经跳到该项目顶部的项目并不是很清楚。可见10,可见10底部的项目,或大致在屏幕中间的项目(对于我的应用程序,我实际上更喜欢在屏幕中间突出显示所选项目 - 但这是另一项任务) 。即使规则类似于“它总是最重要的项目”,当我跳到项目100时会崩溃,因为现在屏幕顶部的项目是项目91.所以有动力。

我整个上午一直在谷歌上搜索。以下是我尝试过的一些事情。

在onCreate(...)期间:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);

如果我触摸列表中的某个项目,那么工作正常,但如果我使用我的“今天”按钮(调用setSelection(n)),列表会立即滚动到该项目,但不会突出显示该项目为灰色。

private void FocusToday()
{
    int today = getItemClosestToToday();
    this.setSelection(today);
    getListView().getSelectedView().setBackgroundColor(Color.RED);

getListView()返回null。

public void onCreate(Bundle savedInstanceState)
{
    ...
    m_ListView = this.getListView();
}

private void FocusToday()
{
    int today = getItemClosestToToday();
    this.setSelection(today);
    View view = m_ListView.getSelectedView();
    view.setBackgroundColor(Color.RED);

视图为空。

除了: 我一直在努力思考我之前看到过这种行为的地方,绞尽脑汁 - 这是一个Android应用吗?一个iPhone应用程序?一个网络应用?然后它打了我 - 它在堆栈溢出!当您点击答案的链接时,答案会以橙色突出显示大约半秒钟,然后橙色消失!这就是我在我的应用中寻找的行为!

编辑:如果项目在屏幕上开始,则以下情况有效,但如果该项目在屏幕外,则无效。

View view = m_ListView.getChildAt(today);
view.setBackgroundColor(Color.RED);

如果今天超过可见项目的数量,则视图为null。当我找到getFirstVisiblePosition()时,我以为我正在做些什么。不幸的是,在这种情况下:

this.setSelection(today);
int firstVisible = m_ListView.getFirstVisiblePosition();

firstVisible始终为0,无论今天是范围内的数字还是可见项目,或者在该范围之外。添加notifyDataSetChanged没有区别:

this.setSelection(today);
getListAdapter().notifyDataSetChanged();
int firstVisible = m_ListView.getFirstVisiblePosition();

firstVisible仍为0。

1 个答案:

答案 0 :(得分:1)

你应该有两种处理亮点的方法。

如果该项目在屏幕上,请继续使用您的工作。 ie.find视图并立即对其进行操作。

如果它不在屏幕上,请从适配器的bindview()/ getView中启动突出显示。

所以要改写一下,如果找不到视图,请设置一个带有要突出显示的id的标志。在getView中,突出显示具有该ID的单元格并清除标记。