Android - 从水平滚动列表视图中删除一行

时间:2014-02-23 08:37:39

标签: android android-layout listview android-fragments horizontalscrollview

我有一个列表视图,右下角有两个文本视图和一个删除按钮(隐藏),每个列表项都可滚动,当我向左滚动时会出现删除按钮。我能够在列表中单击删除按钮,但是我无法删除该列表行。

布局看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:scrollbars="none"
        android:layout_height="match_parent"
        android:focusable="false" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:orientation="horizontal" >

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/linearLayoutTeamInvitesListItem"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="false"
                android:onClick="onClickTeamInvitesListText"
                android:orientation="vertical" >

                <com.headsup.customviews.TextViewPlus
                    android:id="@+id/textViewListNameTeamInvites"
                    style="@style/text_view_list_item_style"
                    android:layout_marginTop="10dp"
                    android:focusable="false" >
                </com.headsup.customviews.TextViewPlus>

                <com.headsup.customviews.TextViewPlus
                    android:id="@+id/textViewListEmailTeamInvites"
                    style="@style/text_view_list_item_style"
                    android:layout_marginBottom="10dp"
                    android:focusable="false" >
                </com.headsup.customviews.TextViewPlus>
            </LinearLayout>

            <Button
                android:id="@+id/buttonListViewTeamInvite"
                android:layout_width="@dimen/teams_invites_listview_button_width"
                android:layout_height="match_parent"
                android:background="#FFFF0000"
                android:onClick="onClickTeamInvitesListButton"
                android:text="@string/delete" >
            </Button>
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout> 

现在我必须删除列表行,当我点击删除按钮,所以我有“onClickTeamInvitesListButton”,函数调用活动类,我将它重定向到片段,以便我可以访问列表视图。

活动中的功能如下所示。

public void onClickTeamInvitesListButton(View view) {
        fragmentTeamInvites.onClickTeamInvitesListButton(view);
    }

片段中的函数就是这样。

 private static ListView listView;
 private static MyListAdapter mListAdapter;
...
...
public void onClickDeleteButton(View view) {
        int position = listView.getPositionForView(view);
        listView.removeViewAt(position);
        mListAdapter.notifyDataSetChanged();
    }

找到答案..需要将我的列表代码更改为此。

public void onClickDeleteButton(View view) {
        int position = listView.getPositionForView(view);
        listDataModel.remove(position);
        mListAdapter.notifyDataSetChanged();
    }

1 个答案:

答案 0 :(得分:2)

问题在于:

public void onClickDeleteButton(View view) {
    int position = listView.getPositionForView(view);
    listView.removeViewAt(position);
    mListAdapter.notifyDataSetChanged();
}

您要从ListView中删除该项目,而不是从数据源(适配器)中删除该项目。因此,当您调用notifyDataSetChanged()时,适配器会尝试刷新数据,但由于数据中没有任何更改,它会再次显示所有行。

您应该从适配器中删除该项,而不是ListView