添加向右滑动删除 ListView 项目
Add swipe right to delete ListView item
我有一个使用自定义适配器(扩展了 BaseAdapter)的 ListView。如何添加滑动删除手势?
我想使用与 gmail 应用程序相同的功能。
最简单的方法是将 ListView
移至 RecyclerView
并使用具有单列的 GridLayoutManager
。它看起来一样,但允许您使用 ItemTouchHelper
.
滑动关闭
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
recyclerView.setAdapter(adapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
// Remove item from backing list here
adapter.notifyDataSetChanged();
}
});
itemTouchHelper.attachToRecyclerView(recyclerView);
您可以使用库 ::
我发现的最简单的方法是在 StatefullWidget
中使用 ListView.builder
并将子项包装在 Dismissible
组件中:
ListView.builder(
itemCount: sampleList.length, //number of items on the list
itemBuilder: (BuildContext context, int index) {
return Dismissible(
key: Key(sampleList[index]), //unique key string for each element (in this case each string is unique)
onDismissed: (direction) {
setState(() {
sampleList.removeAt(index); //remove list element at given index and repaint
});
},
child: child: Text('${sampleList[index]}'), //what to display form the list
);
},
);
您可以 check/copy 将下面的代码作为工作示例,并将其作为子项传递给组件:
import 'package:flutter/material.dart';
class DismissibleList extends StatefulWidget {
@override
_DismissibleListState createState() => _DismissibleListState();
}
class _DismissibleListState extends State<DismissibleList> {
@override
Widget build(BuildContext context) {
List<String> sampleList = ['aa', 'bb', 'cc']; // the list of elements
return ListView.builder(
itemCount: sampleList.length, //number of items on the list
itemBuilder: (BuildContext context, int index) {
return Dismissible(
key: Key(sampleList[index]), //unique key string for each element (in this case each string is unique)
onDismissed: (direction) {
setState(() {
sampleList.removeAt(index); //remove list element at given index and repaint
});
},
child: child: Padding(
padding: EdgeInsets.all(16.0), // just to help the visual
child: Text('${sampleList[index]}'),
) //what to display form the list
);
},
);
}
}
已接受的答案已翻译成 Kotlin:
val itemTouchHelper = ItemTouchHelper(object: ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
TODO("Not yet implemented")
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
todoListAdapter.notifyDataSetChanged()
}
})
this.runOnUiThread {
itemTouchHelper.attachToRecyclerView(recyclerView)
}
我有一个使用自定义适配器(扩展了 BaseAdapter)的 ListView。如何添加滑动删除手势?
我想使用与 gmail 应用程序相同的功能。
最简单的方法是将 ListView
移至 RecyclerView
并使用具有单列的 GridLayoutManager
。它看起来一样,但允许您使用 ItemTouchHelper
.
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
recyclerView.setAdapter(adapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
// Remove item from backing list here
adapter.notifyDataSetChanged();
}
});
itemTouchHelper.attachToRecyclerView(recyclerView);
您可以使用库 ::
我发现的最简单的方法是在 StatefullWidget
中使用 ListView.builder
并将子项包装在 Dismissible
组件中:
ListView.builder(
itemCount: sampleList.length, //number of items on the list
itemBuilder: (BuildContext context, int index) {
return Dismissible(
key: Key(sampleList[index]), //unique key string for each element (in this case each string is unique)
onDismissed: (direction) {
setState(() {
sampleList.removeAt(index); //remove list element at given index and repaint
});
},
child: child: Text('${sampleList[index]}'), //what to display form the list
);
},
);
您可以 check/copy 将下面的代码作为工作示例,并将其作为子项传递给组件:
import 'package:flutter/material.dart';
class DismissibleList extends StatefulWidget {
@override
_DismissibleListState createState() => _DismissibleListState();
}
class _DismissibleListState extends State<DismissibleList> {
@override
Widget build(BuildContext context) {
List<String> sampleList = ['aa', 'bb', 'cc']; // the list of elements
return ListView.builder(
itemCount: sampleList.length, //number of items on the list
itemBuilder: (BuildContext context, int index) {
return Dismissible(
key: Key(sampleList[index]), //unique key string for each element (in this case each string is unique)
onDismissed: (direction) {
setState(() {
sampleList.removeAt(index); //remove list element at given index and repaint
});
},
child: child: Padding(
padding: EdgeInsets.all(16.0), // just to help the visual
child: Text('${sampleList[index]}'),
) //what to display form the list
);
},
);
}
}
已接受的答案已翻译成 Kotlin:
val itemTouchHelper = ItemTouchHelper(object: ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
TODO("Not yet implemented")
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
todoListAdapter.notifyDataSetChanged()
}
})
this.runOnUiThread {
itemTouchHelper.attachToRecyclerView(recyclerView)
}