Eskiden SwipeToDismiss kitaplığı kullanıyordum ama şimdi RecyclerView'a geçmeye çalışıyorum ve işler o kadar açık değil, bu kitaplığın yerini alacak herhangi bir şey biliyor musunuz? Sıfırdan nasıl uygulanacağına dair bir fikrin var mı?
Eskiden SwipeToDismiss kitaplığı kullanıyordum ama şimdi RecyclerView'a geçmeye çalışıyorum ve işler o kadar açık değil, bu kitaplığın yerini alacak herhangi bir şey biliyor musunuz? Sıfırdan nasıl uygulanacağına dair bir fikrin var mı?
Yanıtlar:
V22.2.0'dan itibaren Android destek ekibi, kaydırarak kapatmayı ItemTouchHelperve sürükleyip bırakmayı oldukça basit hale getiren bir sınıf dahil etti. Bu, bazı kütüphaneler kadar tam özellikli olmayabilir, ancak doğrudan Android ekibinden geliyor.
Build.gradle'ınızı RecyclerView kitaplığının v22.2. + 'Sını içe aktarmak için güncelleyin
compile 'com.android.support:recyclerview-v7:22.2.+'Uygun bir SimpleCallback ile bir ItemTouchHelper örneğini oluşturun
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
[...]
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
//Remove swiped item from list and notify the RecyclerView
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
** SimpleCallback'in, sürükle ve bırak özelliğini etkinleştirmek istediğiniz yönleri ve kaydırmayı etkinleştirmek istediğiniz yönleri aldığını unutmayın.
RecyclerView'ınıza ekleyin
itemTouchHelper.attachToRecyclerView(recyclerView);viewHolder.
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
final int position = viewHolder.getAdapterPosition(); //get position which is swipe
if (direction == ItemTouchHelper.LEFT) { //if swipe left
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //alert for confirm to delete
builder.setMessage("Are you sure to delete?"); //set message
builder.setPositiveButton("REMOVE", new DialogInterface.OnClickListener() { //when click on DELETE
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.notifyItemRemoved(position); //item removed from recylcerview
sqldatabase.execSQL("delete from " + TABLE_NAME + " where _id='" + (position + 1) + "'"); //query for delete
list.remove(position); //then remove item
return;
}
}).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { //not removing items if cancel is done
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.notifyItemRemoved(position + 1); //notifies the RecyclerView Adapter that data in adapter has been removed at a particular position.
adapter.notifyItemRangeChanged(position, adapter.getItemCount()); //notifies the RecyclerView Adapter that positions of element in adapter has been changed from position(removed element index to end of list), please update it.
return;
}
}).show(); //show alert dialog
}
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(recyclerView); //set swipe to recylcerview
Burada Kod'da, kullanıcı sola kaydırırsa AlertDialog görüntülenir ve kullanıcı KALDIR'ı seçerse öğe veritabanından silinir ve geri dönüşüm görünümü yenilenir ve kullanıcı İPTAL'i seçerse geri dönüşüm görünümü olduğu gibidir.
if (direction == ItemTouchHelper.LEFT) // if swipe leftolduğu için yön kontrolüne gerçekten ihtiyacınız yok ItemTouchHelper.SimpleCallback. Sol ve sağ kaydırma yapmak ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)istiyorsanız, o zaman yönü kontrol etmeniz gerekir.
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // stuff to put the item back } });
adapter.notifyItemChanged(position);ziyade yürütmüş madde geri getirdi notifyItemRemoveddaha mantıklı imho olan -.
belki bu kitaplığı deneyebilirsin:
https://github.com/daimajia/AndroidSwipeLayout
Güncelleme: RecyclerView ile kullanabileceğiniz başka bir iyi kitaplık buldum:
Bu kitaplık yardımcı olabilir undo. OnDissmissKullanım sırasında uygulayabilirsiniz .supertoast
OnTouchListener tarafından ilham bu
Geri dönüşümcü görünümlerinde kaydırarak sil ve geri al özelliğini destekleyen SwipeToDeleteRV kitaplığı yazdım . ItemTouchHelper tabanlıdır ve kullanımı çok kolaydır.
Umarım aynı sorunlarla karşılaşan birine yardımcı olabilir.
Örnek olarak, geri dönüşümlü görünümünüzü bir XML düzeninde normal olarak ve ayrıca bazı isteğe bağlı nitelikleri tanımlayabilirsiniz:
...
xmlns:stdrv="http://schemas.android.com/apk/res-auto"
...
<io.huannguyen.swipetodeleterv.STDRecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
stdrv:border_color="@android:color/darker_gray" // specify things like border color, border width, etc.
stdrv:delete_view_background="#cccccc"
stdrv:delete_icon="@drawable/ic_archive"
stdrv:delete_icon_height="24dp"
stdrv:delete_icon_width="24dp"
stdrv:left_delete_icon_margin="32dp"
stdrv:delete_message="@string/delete_message"
stdrv:right_delete_icon_margin="32dp"
stdrv:delete_icon_color="#000000"
stdrv:has_border="true"/>
Tüm stdrv öznitelikleri isteğe bağlıdır. Bunları belirtmezseniz, varsayılan olanlar kullanılacaktır.
Ardından, STDAdapter alt sınıfları olan bir bağdaştırıcı oluşturun, süper sınıf yapıcısını çağırdığınızdan emin olun. Bunun gibi bir şey:
public class SampleAdapter extends STDAdapter<String> {
public SampleAdapter(List<String> versionList) {
super(versionList);
}
}
Ardından, setupSwipeToDeletesilmek için kaydır özelliğini ayarlamak için yönteme bir çağrı yaptığınızdan emin olun .
mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions);
swipe_directions öğelerin kaydırılmasına izin verdiğiniz yön.
Misal:
// Get your recycler view from the XML layout
mRecyclerView = (STDRecyclerView) findViewById(R.id.recycler_view);
LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(layoutManager);
mAdapter = new SampleAdapter(versions);
// allow swiping in both directions (left-to-right and right-to-left)
mRecyclerView.setupSwipeToDelete(mAdapter, ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT);
Bu kadar! Daha gelişmiş ayarlar için (yani, farklı öğeler için farklı silme mesajları ayarlayın, öğeleri geçici ve kalıcı olarak kaldırın, ...) lütfen proje benioku sayfasına bakın.