Android listview设置选择和滚动到位置

Android listview设置选择和滚动到位置,android,listview,android-listview,Android,Listview,Android Listview,我对这个ListView几乎失去了最后一点耐心。似乎建造它的人没有想到我的场景: 该列表在活动布局上大约有5行可见 应使用按钮滚动列表:“Down”-用于选择下一项“向上”用于选择上一个选项 所选项目必须可见。如果可能,请在视图中居中。这意味着当按下向上/向下按钮时,列表将滚动,项目将保持在原位 我已经拥有的: 带有适配器的列表,以及使用 listview.getChildAt(index).setSelected(true) 滚动列表的一种不太可靠的方法:使用: smoothScrollToP

我对这个
ListView
几乎失去了最后一点耐心。似乎建造它的人没有想到我的场景:

  • 该列表在活动布局上大约有5行可见
  • 应使用按钮滚动列表:
    “Down”
    -用于选择下一项<代码>“向上”用于选择上一个选项
  • 所选项目必须可见。如果可能,请在视图中居中。这意味着当按下向上/向下按钮时,列表将滚动,项目将保持在原位
  • 我已经拥有的:

  • 带有
    适配器的列表
    ,以及使用
    listview.getChildAt(index).setSelected(true)
  • 滚动列表的一种不太可靠的方法:使用:
    smoothScrollToPositionFromTop(mCurSel,0100)
  • 它是不可靠的,因为一旦它到达一个没有标准高度的项目(与列表中的其他项目不同),它就开始扰乱选择/滚动,并到达列表开始表现得非常古怪的点


    现在,有没有其他选择(就绪,开源)可以满足我的需求?我正要在没有ListView的情况下重新写入该列表。

    如果我理解正确,您希望滚动到正确的位置。滚动时获取正确行位置(在ListView中)的问题存在固有的计时问题。在任何时候,我们都需要确定哪些行位置是可见的。我使用了listener
    setOnScrollListener
    。 示例代码:

    listview.setOnScrollListener(new AbsListView.OnScrollListener() {
       @Override
       public void onScrollStateChanged(AbsListView view, int scrollState) {
                    }
    
       @Override
       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
          topVisiblePosition = firstVisibleItem;
          ...
       }
    
    后来

    listview.setSelection(topVisiblePosition);
    
    注:

    • 我没有注意到
      onScroll
      listener方法有任何性能滞后
    • setSelection
      方法对我来说已经足够了
    • 变量topVisiblePosition保存在类中,与setSelection方法一起使用
    • onScroll
      override方法包含有用的信息,如
      visibleItemCount
      及其总计数,至少有助于确定最后一个可见行

      • 也许ListView也可以,但不是很容易。。无论如何,如果使用v7支持包中的RecyclerView,这里有一个很好的帖子,告诉你如何做我想做的事情:

        因此,请回答以下问题:

        为了节省时间,任何人都可以尝试简单而复杂的方法,通过正确的选择来获得一个理智的列表。。。很基本,下面是我的解释:

      • 使用SDK管理器获取“support v7”包

      • 如果在Android Studio中工作,将v7 jar添加到项目中应该是轻而易举的事,使用eclipse就像在火上行走和同时喝酸一样(一点也不好玩)-简而言之:从sdk存储库复制以下jar:

      • a。sdk/../extra/..v4/android-support-v4.jar添加到“libs”下的项目中, B对sdk/../extra/..v7/.RecyclerView/RecyclerView-v7-22.0.0.jar c执行同样的操作。和sdk/../extra/..v7/.cardwiew/cardwiew-v7-22.0.0.jar D将sdk/../extra/..v7/.CardView/values.xml合并到项目的values.xml中

        到目前为止-只需将RecyclerView添加到您的项目中。。。啊。。这么多工作!;)我为你节省了研究的时间

        注意:布局编辑器无法识别RecyclerView,因此您必须手动添加它(并且它将继续呼喊这是一个糟糕的类…等等)

      • 主要活动布局:
      • 
        
        ScrollView。滚动到(0,‘列表视图项的位置’);ListView背后的原理是,它们通过手势滚动,不需要向上或向下按钮。如果您是为非触摸屏设计的,ListView已经可以处理了。此外,ListView还可以处理选择模式(请参见属性),并可以显示选择状态(例如,使用)。正如我所写的,按钮是一项要求。。是的,这是不标准的。也许这就是为什么它是马车的原因…有趣的答案。。。滚动-然后设置选择。我明天去看看。谢谢我觉得有问题。但是嘿,listview不是为它而构建的。。。没有任何简单/合理的解决方案。有一天我想使用/尝试RecyclerView,但我还不确信它比ListView好。看,这正是问题所在。没有人告诉你最明显的选择也是最糟糕的(在这种情况下)