2017-03-14 16 views
5

Điều tôi có ở đây là trang Lịch sử hiển thị các yêu cầu mà người dùng đã chấp nhận hoặc đăng. Tôi đã có thể đặt thành công một nút để người dùng xóa tất cả lịch sử mà người dùng có. Bây giờ tôi muốn người dùng có thể xóa từng lịch sử bằng cách vuốt nó.Làm thế nào để vuốt để xóa trên 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); 
} 

tôi đã không thực sự cố gắng bất cứ điều gì vì những câu hỏi khác tôi đã nhìn thấy ở đây cho đến nay dường như không thể tương tự như mã của tôi.

+1

Cảm ơn bạn @Rotwang – exc3m

Trả lời

1

Bạn sẽ phải sử dụng thư viện/tiện ích hiện có trừ khi bạn muốn tạo chức năng từ đầu.

Ví dụ:

https://android-arsenal.com/details/1/4897

Bạn có hướng dẫn đầy đủ có nhưng về cơ bản:

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(); 
     } 
    }); 
9

Nó là khá đơn giản và bạn có thể làm điều đó mà không sử dụng bất kỳ thư viện của bên thứ 3 là tốt.

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
itemTouchHelper.attachToRecyclerView(rv); 

Và bây giờ gọi lại,

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); 
     } 
}; 

Bây giờ bạn có thể xác định được mặt hàng của bạn đã được swiped. Bạn có thể xóa mục khỏi bộ điều hợp của mình và có thể notifyDataSetChanged().

+0

vì vậy tôi có thể đặt mã đó vào mã của mình ở đâu? – exc3m

+0

Tôi đã cập nhật mã, vui lòng kiểm tra. –

Các vấn đề liên quan