【问题标题】:How to get current view item in list view after scrolling滚动后如何在列表视图中获取当前视图项
【发布时间】:2015-10-22 06:47:48
【问题描述】:



滚动列表视图时,我想获取具有文本视图和图像的当前视图。
基于此,我想在列表顶部显示第一个可见联系人视图项的起始字母,类似于我们的联系人列表。
我尝试了以下操作,但这在滚动后给出了无效索引。

HomeContactView extends AppCompatActivity implements AbsListView.OnScrollListener

覆盖对应的方法

 @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
final ListView listView = mainListView;
        int location = listView.getFirstVisiblePosition();
}

通过这个我无法获得当前的焦点视图及其元素。如何实现这一点?任何帮助都是非常可观的。

【问题讨论】:

  • 你能告诉我哪些代码给出了无效索引吗?
  • @Vlad Matvienko:感谢您的意见。那个图书馆工作。在 Recycler 视图中包含相同内容的可能性如何
  • 你想让我代替你再用谷歌搜索吗?

标签: android listview onscrolllistener


【解决方案1】:

我认为您的代码接近正确。我会使用当前参数view 并对其进行类型转换。我检查滚动状态(参数scrollState)。您希望避免在用户仍在滚动时处理 ListView。

代码示例:

@Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
       if (scrollState == SCROLL_STATE_IDLE) {
          final ListView listView = (ListView) view;
          int location = listView.getFirstVisiblePosition();

          View firstView = listview.getChildAt(location);
        }
   }

您还可以覆盖另一个方法public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)。这种方法的好处是您可以将 firstVisibleItem 作为整数类型。我用过,它准确

【讨论】:

  • 我尝试使用 Vlad Matvienko 建议的链接,但在实现动态图像渲染的列表视图中破坏了库。否则 StickyHeaderListView 是完美的。因此,根据 The Original Android ,我再次尝试并且成功了。谢谢大家
【解决方案2】:

您可以使用getChildAtmetgod 获取第一行:

View convertView = listview.getChildAt(listview.getFirstVisiblePosition());

您可以使用转换视图找到您的对象,如下所示:

convertView.findRbyID(R.id.textview)

但建议使用`RecyclerView...

【讨论】:

    【解决方案3】:

    为什么不使用 RecyclerView / ListView 的 getFocusedChild() 方法呢?该方法仅在用户聚焦视图时才有效

    另一种方式,你可以这样做

    View v = listview.getChildAt(listview.getFirstVisiblePosition());
    String firstLetter = ((TextView)v.findViewById(R.id.textview)).getText().toString().substring(0,1);
    

    【讨论】:

    • 我尝试了以下 .现在它在几次滚动后给出异常。
    • @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){ try { View convertView = mainListView.getChildAt(mainListView.getFirstVisiblePosition()); TextView txtView = (TextView)convertView.findViewById(R.id.textViewMain); Log.v(AppConstants.APPUILOG, "TextView 文本"+txtView.getText()); } catch (Exception e) { Log.e(AppConstants.APPUILOG, " Ex="+e.toString()); } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多