带有Switch onCheckedListener的Android ListView很奇怪

我对android开发相当陌生,并开始了一个小应用程序项目。现在我有一个问题,我似乎无法独自解决,在搜索中找不到解决方案。所以我希望您能对我有个建议:)

我有一个带有这样的模板的ListView:

<Switch
    android:id="@+id/trackingSwitch"
    android:layout_columnSpan="1"
    android:layout_alignParentLeft="true"
    android:layout_row="0"
    android:layout_column="0" />

<TextView
    android:id="@+id/tvName"
    android:layout_columnSpan="1"
    android:text="Name"
    android:textColor="#545454"
    android:textSize="20dp"
    android:layout_marginLeft="10dp"
    android:layout_gravity="fill_horizontal"
    android:layout_row="0"
    android:layout_column="1" />

<TextView
    android:id="@+id/tvTime"
    android:layout_columnSpan="1"
    android:text="Time"
    android:textSize="15dp"
    android:textStyle="italic"
    android:layout_marginLeft="10dp"
    android:layout_gravity="fill_horizontal"
    android:layout_row="1"
    android:layout_column="1" />
 </GridLayout>

它工作得很好,给了我一个“切换按钮”和两个“文本”字段。现在我想用对象数据填充它,因此我扩展了一个ArrayAdapter并将其放在getView()中:

  @Override
  public View getView(int position, View view, ViewGroup parent) {
    // Get the data item for this position
    final AniTracking aniTracking = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    if (view == null) {
        view =      LayoutInflater.from(getContext()).inflate(R.layout.tracking_list, parent, false);
    }
    // Lookup view for data population
    Switch swActive = (Switch) view.findViewById(R.id.trackingSwitch);
    TextView tvName = (TextView) view.findViewById(R.id.tvName);
    TextView tvTime = (TextView) view.findViewById(R.id.tvTime);

    // Populate the data into the template view using the data object
    swActive.setChecked(aniTracking.isActive());
    tvName.setText(aniTracking.getName());
    tvTime.setText(aniTracking.getCurrentTrackingTime());


    // attach listener to switch
    swActive.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean newStatus) {
            // switch set to active? start new AniTrackingPart
            if (newStatus == true) {
                AniTrackingPart aniTrackingPart = new AniTrackingPart();
                aniTrackingPart.setStartTime(new DateTime());
                AniTrackingManager.getInstance(getContext()).addAniTrackingPart(aniTracking, aniTrackingPart);
            }
            // set to inactive -> close current AniTrackingPart
            else {
                AniTrackingManager.getInstance(getContext()).closeActiveTrackingPart(aniTracking);
            }
        }
    });

    // Return the completed view to render on screen
    return view;
}

我的问题是onCheckedChange侦听器。当我添加它时,开关的行为很奇怪,给每个项目都设置为true。我注意到一个位置多次调用getView()方法,我需要自己关心吗?我也有一种感觉,当我填充position2的数据(swActive.setChecked(aniTracking.isActive()))时,可能会触发position1的侦听器,这可能吗?

感谢您提供的所有帮助,这使我的工作停止了几天。

祝你有美好的一天,阿妮

编辑以澄清不是重复的问题:如果不会多次调用getView(),也会出现此问题。在ListView中为每个项目调用它时,对位置> 1的调用已经触发了我的侦听器,并给了我错误的结果。

TWL

您的第一个问题是弄清楚为什么您notifyDataSetChanged被这么多次打电话。这将触发所有可见视图的getView。

您的第二个问题,setChecked将触发您的setOnCheckedChangeListener

您可以通过使用以下方法setOnClickListener避免这种情况

    switch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (switch.isChecked()) {

            } else {

            }
        }
    });

以确保仅在被触摸时才调用它,而不是由用户界面引起的更改调用。

(您还需要将开关更改为final Switch

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的ListView中有奇怪的错误(Android)

来自分类Dev

带有图像的Android ListView

来自分类Dev

带有查询的Android ListView

来自分类Dev

带有 TextView 和 Checkboxes 的 Listview 表现得很奇怪

来自分类Dev

Android中带有switch语句的AlertDialog

来自分类Dev

Android:ListView的页边距奇怪

来自分类Dev

Android:ListView的页边距奇怪

来自分类Dev

带有Switch小部件的ListView,不会触发onItemClick

来自分类Dev

Android插入带有viewview结果的listview

来自分类Dev

带有onClick项的Android ListView

来自分类Dev

带有标头视图的Android ListView

来自分类Dev

带有片段的Android ListView

来自分类Dev

android中带有动画的水平ListView

来自分类Dev

带有子项的ListView。Android示例

来自分类Dev

android,带有复选框的listview

来自分类Dev

带有onClickListener()的Android Google Map ListView

来自分类Dev

带有垂直彩色边框的Android listview

来自分类Dev

带有onClick项的Android ListView

来自分类Dev

android中带有动画的水平ListView

来自分类Dev

带有隐藏标题的Android ListView

来自分类Dev

带有ListView的Android对话框

来自分类Dev

带有onClickListener()的Android Google Map ListView

来自分类Dev

带有google chrome的android上的奇怪html渲染

来自分类Dev

Windows Phone 8.1 XAML中带有WrapGrid的ListView的奇怪行为

来自分类Dev

Android应用程序中的listview中的奇怪故障

来自分类Dev

为什么列表在android listview中看起来很奇怪?

来自分类Dev

Android 中 ListView 上项目选择的奇怪动作

来自分类Dev

ListView具有混合触发器的奇怪行为

来自分类Dev

带有arraylist的listview,android中的简单适配器