我有一个列表视图,右下角有两个文本视图和一个删除按钮(隐藏),每个列表项都可滚动,当我向左滚动时会出现删除按钮。我能够在列表中单击删除按钮,但是我无法删除该列表行。
布局看起来像这样。
<?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();
}
答案 0 :(得分:2)
问题在于:
public void onClickDeleteButton(View view) {
int position = listView.getPositionForView(view);
listView.removeViewAt(position);
mListAdapter.notifyDataSetChanged();
}
您要从ListView
中删除该项目,而不是从数据源(适配器)中删除该项目。因此,当您调用notifyDataSetChanged()
时,适配器会尝试刷新数据,但由于数据中没有任何更改,它会再次显示所有行。
您应该从适配器中删除该项,而不是ListView
!