5

내가 여기에있는 것은 사용자가 수락하거나 게시 한 요청을 표시하는 기록 페이지입니다. 나는 사용자가 가지고있는 모든 히스토리를 삭제할 수있는 버튼을 넣을 수 있었다. 이제 사용자가 스 와이프하여 한 번에 하나의 기록을 삭제할 수 있기를 바랍니다. 내가 여기에 본 것 중에 다른 질문이 지금까지 내 코드와 유사 할 것 같지 않기 때문에 정말 아무것도 시도하지 않은RecyclerView에서 삭제하려면 스 와이프 하시겠습니까?

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

HistoryFragment.java.

+1

감사합니다. @ RoWang – exc3m

답변

1

처음부터 기능을 만들지 않는 한 기존 라이브러리/위젯을 사용해야합니다. 예를 들어

:

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

그것은 매우 간단하고 당신은뿐만 아니라 모든 제 3 자 라이브러리를 사용하지 않고 그것을 할 수 있습니다.

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() 수 있습니다.

+0

어디에서 코드를 입력 할 수 있습니까? – exc3m

+0

코드를 업데이트했습니다. 확인하십시오. –

관련 문제