我有一个ListView
,其中有一组要垂直列出的子项(查看对象)供用户查看。我必须跟踪用户的观点,比方说,
一个。如果用户查看一组项目大约1秒钟,我应该跟踪展示次数。
湾如果同一个用户将项目滚出视口并返回,我应该再次跟踪,如果他查看了1秒钟。
我尝试过多个选项,例如getGlobalVisibleRect()
,getLocalVisibleRect()
,getLocationOnScreen()
,这些选项首先令人困惑,并没有帮助我获得正确的坐标和儿童的可见度listView
的项目。
我检查Track impression of items in an android ListView这有点类似于我的要求,但我想检查是否有更好的解决方案。如果我不清楚某些解释,我是Android新手并道歉
答案 0 :(得分:1)
为了获得理想的结果,我认为我们有两种不同的解决方案。首先,为每个项目创建Handler,如果可见,则在滚动视图中调用/删除。但这非常愚蠢,因为创建如此多的处理程序将使你的应用程序的生活变得地狱。
第二种也是最好的方法是对整个可见项使用call / remove单个Handler。如果它持续一段时间"第二个" (1秒为你),在你的每个项目的模型类中使用印象计数,并用++运算符增加它。
您可以在listivew中添加滚动侦听器。该脚本将像 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:weightSum="2"
android:orientation="horizontal"
android:background="@color/Black">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center"
android:layout_gravity="center"
android:maxLines="1"
android:layout_weight="1.99"
android:textColor="@color/white"
android:textSize="@dimen/infoTitle"/>
<TextView
android:id="@+id/badgeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center"
android:layout_marginEnd="1dp"
android:layout_marginRight="1dp"
android:layout_weight="0.01"
android:background="@drawable/tab_controller_badge"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/miniTextSize"
android:text="11"/>
</LinearLayout>
我假设您将使用onCreate方法中的id绑定ListView。在将视图与变量绑定后,您也可以在onCreate中调用侦听器事物。
我希望这可以满足您的要求。
让我知道您的反馈意见。