滚动列表视图时,我希望获得具有textview和图像的当前视图。
基于此我想在列表顶部显示第一个可见联系人视图项目的起始字母,类似于我们的联系人列表。
我尝试了以下内容,但这是滚动后给出无效索引。 / p>
HomeContactView extends AppCompatActivity implements AbsListView.OnScrollListener
覆盖相应的方法
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
final ListView listView = mainListView;
int location = listView.getFirstVisiblePosition();
}
答案 0 :(得分:1)
为什么不使用RecyclerView / ListView的getFocusedChild()方法?该方法仅在用户聚焦视图时才有效
另一种方法,你可以做到
View v = listview.getChildAt(listview.getFirstVisiblePosition());
String firstLetter = ((TextView)v.findViewById(R.id.textview)).getText().toString().substring(0,1);
答案 1 :(得分:1)
您可以使用getChildAt
metgod:
View convertView = listview.getChildAt(listview.getFirstVisiblePosition());
并且您可以使用转换视图找到对象,如下所示:
convertView.findRbyID(R.id.textview)
但建议使用`RecyclerView ...
答案 2 :(得分: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 作为整数类型。我已经使用过它,准确。