[英]How to swipe to delete on RecyclerView?
我在這里有一個歷史頁面,顯示用戶已接受或發布的請求。 我能夠成功地為用戶放置一個按鈕來刪除用戶擁有的所有歷史記錄。 現在我希望用戶能夠通過滑動一次刪除一個歷史記錄。
HistoryFragment.java
RecyclerView rView;
Button clear;
DatabaseReference dRef;
LinearLayoutManager llm;
String id;
View myView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.history, container, false);
FirebaseUser fu = FirebaseAuth.getInstance().getCurrentUser();
id = fu.getUid();
dRef = FirebaseDatabase.getInstance().getReference().child("History"+id);
clear = (Button) myView.findViewById(R.id.clear);
rView = (RecyclerView) myView.findViewById(R.id.history_list);
rView.setHasFixedSize(true);
llm = new LinearLayoutManager(getActivity());
llm.setReverseLayout(true);
llm.setStackFromEnd(true);
rView.setLayoutManager(llm);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dRef.removeValue();
}
});
return myView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<HistoryData, HistoryFragment.RequestViewHolder> fra = new FirebaseRecyclerAdapter<HistoryData, HistoryFragment.RequestViewHolder>(
HistoryData.class,
R.layout.historylistview,
HistoryFragment.RequestViewHolder.class,
dRef
) {
@Override
protected void populateViewHolder(final HistoryFragment.RequestViewHolder viewHolder, HistoryData model, final int position) {
viewHolder.setTrans(model.getTrans());
viewHolder.setRequestDeadline(model.getRequestDeadline());
viewHolder.setRequestDescription(model.getRequestDescription());
viewHolder.setDateTimeAccepted(model.getDateTimeAccepted());
viewHolder.setRequestLocation(model.getRequestLocation());
viewHolder.setProfile(getApplicationContext() ,model.getProfile());
}
};
rView.setAdapter(fra);
}
public static class RequestViewHolder extends RecyclerView.ViewHolder{
View myView;
public RequestViewHolder(View itemView) {
super(itemView);
myView = itemView;
}
public void setTrans(String profile){
TextView trans = (TextView) myView.findViewById(R.id.transaction);
trans.setText(profile);
}
public void setRequestDeadline(String dead){
TextView rdead = (TextView) myView.findViewById(R.id.rDead);
rdead.setText(dead);
}
public void setRequestDescription(String desc){
TextView rdesc = (TextView) myView.findViewById(R.id.rDesc);
rdesc.setText(desc);
}
public void setDateTimeAccepted(String date){
TextView dta = (TextView) myView.findViewById(R.id.rAccept);
dta.setText(date);
}
public void setRequestLocation(String loc){
TextView rloc = (TextView) myView.findViewById(R.id.rLoc);
rloc.setText(loc);
}
public void setProfile(Context c, String profile){
ImageView rprofile = (ImageView) myView.findViewById(R.id.HPicture);
Picasso.with(c).load(profile).into(rprofile);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
我還沒有真正嘗試過任何東西,因為到目前為止我在這里看到的其他問題似乎與我的代碼不相似。
它非常簡單,您可以在不使用任何第三方庫的情況下完成。
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(rv);
現在是回調,
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.DOWN | ItemTouchHelper.UP) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Toast.makeText(MyActivity.this, "on Move", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
Toast.makeText(MyActivity.this, "on Swiped ", Toast.LENGTH_SHORT).show();
//Remove swiped item from list and notify the RecyclerView
final int position = viewHolder.getAdapterPosition();
adapter.notifyItemRemoved(position);
}
};
您現在可以識別您的哪個項目已被刷過。 您可以從適配器中刪除該項,並可以notifyDataSetChanged()
。
除非您想從頭開始創建功能,否則您將不得不使用現有的庫/小部件。
例如:
https://android-arsenal.com/details/1/4897
你有完整的指示,但基本上:
mRecyclerView = new CdsRecyclerView(this);
mRecyclerView = (CdsRecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// Adapter:
mRecyclerViewAdapter = new RecyclerViewAdapter(this, getData());
mRecyclerView.setAdapter(mRecyclerViewAdapter);
// Enable swipe:
mRecyclerView.enableItemSwipe();
// Listener:
mRecyclerView.setItemSwipeCompleteListener(new CdsItemTouchCallback.ItemSwipeCompleteListener() {
@Override
public void onItemSwipeComplete(int position) {
Toast.makeText(MainActivity.this, "Item was swiped:" + position,
Toast.LENGTH_SHORT).show();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.