我有一个使用自定义adaper的ListView(扩展了BaseAdapter)。如何添加滑动以删除手势?
我想使用gmail应用程序使用的相同功能。
答案 0 :(得分:15)
最简单的方法是将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);
答案 1 :(得分:1)
接受的答案翻译为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)
}
答案 2 :(得分:0)
您可以使用lib ::
答案 3 :(得分:-1)
我发现的最简单的方法是在ListView.builder
中使用StatefullWidget
并将子级包装在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
);
},
);
您可以检查/复制下面的代码作为工作示例,并将其作为子代传递给组件:
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
);
},
);
}
}