在Android ListView中跟踪用户对视图项的展示次数

时间:2017-12-13 10:26:38

标签: android listview listviewitem

我有一个ListView,其中有一组要垂直列出的子项(查看对象)供用户查看。我必须跟踪用户的观点,比方说, 一个。如果用户查看一组项目大约1秒钟,我应该跟踪展示次数。 湾如果同一个用户将项目滚出视口并返回,我应该再次跟踪,如果他查看了1秒钟。

我尝试过多个选项,例如getGlobalVisibleRect()getLocalVisibleRect()getLocationOnScreen(),这些选项首先令人困惑,并没有帮助我获得正确的坐标和儿童的可见度listView的项目。

我检查Track impression of items in an android ListView这有点类似于我的要求,但我想检查是否有更好的解决方案。如果我不清楚某些解释,我是Android新手并道歉

1 个答案:

答案 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中调用侦听器事物。

我希望这可以满足您的要求。

让我知道您的反馈意见。