मैं स्वाइप के साथ एक MvxRecyclerview बनाता हूं, मुझे रीसाइक्लरव्यू के स्वाइप किए गए आइटम को हटाने की आवश्यकता है, लेकिन जब मैं स्वाइप करता हूं, तो आइटम को हटा दें और रीसाइक्लरव्यू के नीचे एक और आइटम दिखाई देने के बाद।

Nombre.cs

public class Nombre
{
    public string _name;
    public string name
    {
        get { return _name; }
    }
}

RecyclerViewModel.cs

public class RecyclerViewModel : BaseViewModel
{
    //private IList<Nombre> Items;
    NombreGenesisService lista;

    public RecyclerViewModel()
    {
        //Nombres lista = new Nombres();
        lista = new NombreGenesisService();

        Items = new List<Nombre>
        {
            new Nombre()
            {
                _name = "sebastian",
            },

             new Nombre()
            {
                _name = "Natalia",
            },

            new Nombre()
            {
                _name = "Angelica",
            },
            new Nombre()
            {
                _name = "Octavio",
            },
        };
    }

    private List<Nombre> _items;

    public List<Nombre> Items
    {
        get { return _items; }
        set
        {
            _items = value;
            RaisePropertyChanged(() => Items);
        }
    }
}

}

RecyclerViewFragment.cs

public class RecyclerViewFragment : BaseFragment<RecyclerViewModel>
{
    protected override int FragmentId
    {
        get
        {
            return Resource.Layout.fragment_example_recyclerview;
        }
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var ignore = base.OnCreateView(inflater, container, savedInstanceState);

        var recyclerView = ignore.FindViewById<MvxRecyclerView>(Resource.Id.my_recycler_view);

        if (recyclerView != null)
        {
            recyclerView.HasFixedSize = true;
            var layoutManager = new LinearLayoutManager(Activity);
            recyclerView.SetLayoutManager(layoutManager);

            ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(recyclerView.GetAdapter());
            ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
            itemTouchHelper.AttachToRecyclerView(recyclerView);
            recyclerView.SetItemAnimator(new DefaultItemAnimator());
        }

        return ignore;
    }

    public override void OnDestroyView()
    {
        base.OnDestroyView();

    }
}

SimpleItemTouchHelperCallback.cs

class SimpleItemTouchHelperCallback : ItemTouchHelper.Callback
{
    // private RecyclerView.Adapter adapter;
    private readonly RecyclerView.Adapter _adapter;
    RecyclerViewModel lista;
    NombreGenesisService lista2;
    public SimpleItemTouchHelperCallback(RecyclerView.Adapter adapter)
    {
        _adapter = adapter;
        lista = new RecyclerViewModel();
    }

    public override int GetMovementFlags(RecyclerView p0, RecyclerView.ViewHolder p1)
    {
        int dragFlags = ItemTouchHelper.Up | ItemTouchHelper.Down;
        int swipeFlags = ItemTouchHelper.Start | ItemTouchHelper.End;
        return MakeMovementFlags(dragFlags, swipeFlags);
    }

    public override bool OnMove(RecyclerView p0, RecyclerView.ViewHolder p1, RecyclerView.ViewHolder p2)
    {
        _adapter.NotifyItemMoved(p1.AdapterPosition, p2.AdapterPosition);
        return true;
    }

    public override void OnSwiped(RecyclerView.ViewHolder p0, int p1)
    {
        lista.Items.RemoveAt(p0.AdapterPosition);
        _adapter.NotifyItemRemoved(p0.AdapterPosition);
    }

}

fragment_example_recyclerview.axml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MvxRecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#CCCCCC"
    local:MvxBind="ItemsSource Items;"
    local:MvxItemTemplate="@layout/item_name" />
1
pikipichiummm 11 मई 2016, 07:09
मैंने पहले भी कुछ ऐसा किया है। मेरा नमूना यहां देखें: github.com/martijn00/XamarinItemTouchHelper
 – 
Martijn00
11 मई 2016, 11:01
मदद नहीं की, धन्यवाद
 – 
pikipichiummm
11 मई 2016, 17:54

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि आप अपने टुकड़े के लिए एक व्यूमोडेल बना रहे हैं और अगर मैं गलत नहीं हूं तो इसके कन्स्ट्रक्टर में अपने रीसाइक्लिंग व्यू के लिए एक नया व्यूमोडेल बना रहा हूं। और फिर आप अपने RecyclerView में ViewModel के लिए केवल आइटम निकाल रहे हैं।

हो सकता है कि अपने व्यूमोडेल को फ्रैगमेंट से अपने रीसाइक्लर व्यू में पास करने का प्रयास करें, हालांकि यह एक मधुर दृष्टिकोण की तरह प्रतीत नहीं होता है जो यह काम कर सकता है। मैं बाद में अपने लिए बेहतर समाधान खोजने की कोशिश कर सकता हूं।

0
Cyriac 12 मई 2016, 09:50
फिर अपना कोड देखने की जरूरत है (शायद जीथब पर एक नमूना प्रोजेक्ट बनाएं) या पहले इस पेज को यहां देखें जो अप टू डेट होना चाहिए: smstuebe.de/2016/05/22/mvvmcross-swipe2dismiss
 – 
Cyriac
30 मई 2016, 09:00
github.com/sopoco/Recycle_con_swipe_binding यह कोड का जीथब है
 – 
pikipichiummm
1 जून 2016, 19:19
मेरे द्वारा पहले पोस्ट किए गए ट्यूटोरियल को देखें, आपको व्यूमोडेल पास करने की आवश्यकता है, ताकि आप अपने ऑब्जर्वेबल कलेक्शन में आइटम्स को हटा सकें। फिलहाल आप हमेशा एक नया व्यूमोडेल बना रहे हैं और फिर आइटम को ऑनस्वाइप में हटा रहे हैं।
 – 
Cyriac
2 जून 2016, 09:35