RecyclerView - Adapter - ObjectDisposedException при нажатии кнопки «Назад» - PullRequest
0 голосов
/ 09 января 2019

У нас разработано приложение Xamarin.Android, которое содержит секционный RecyclerView (адаптированный от https://gist.github.com/gabrielemariotti/4c189fb1124df4556058#file-simplesectionedrecyclerviewadapter-java) на домашней странице (назовем его HomeActivityFragment), и когда мы нажимаем на элемент списка, он перенаправляет в ActivityFragment (назовем его WorkOrderActivityFragment), который также содержит RecyclerView.

Вот проблема: когда мы находимся на WorkOrderActivityFragment, когда мы нажимаем кнопку «Назад» (на панели инструментов), она Activity.OnBackPressed () => должна возвращаться к HomeActivityFragment => это работает ... но иногда выдается исключение: ObjectDisposedException в этом примере кода:

public class WorkOrderHeaderAdapter : RecyclerView.Adapter
{
    private SparseArray<Section> Sections { get; } = new SparseArray<Section>();
    internal MeasuringPointAdapter BaseAdapter { get; set; }

    public WorkOrderHeaderAdapter(MeasuringPointAdapter baseAdapter)
    {
        BaseAdapter = baseAdapter;
    }

    public override int ItemCount => BaseAdapter.ItemCount + Sections.Size(); <-- the exception is thrown on this line, especially on "Sections" (SparseArray object)

    // overriden methods
 }

Кажется, я столкнулся с той же проблемой, но в другом адаптере (аналогичный код, также использующий объект SparseArray)

Не знаю, является ли это проблемой, связанной с Xamarin, или, может быть, мы забыли правильно расположить объект SparseArray, но мы не нашли обходного пути: (

Вот исключение, которое я получу в деталях:

01-09 11:05:04.443 I/MonoDroid(27122): UNHANDLED EXCEPTION:
01-09 11:05:04.496 I/MonoDroid(27122): System.ObjectDisposedException: Cannot access a disposed object.
01-09 11:05:04.496 I/MonoDroid(27122): Object name: 'Android.Util.SparseArray`1[[Com.Mobile.LibraryCommon.Android.HomeSectionsItems.Section, Com.Mobile.LibraryCommon.Android, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'.
01-09 11:05:04.496 I/MonoDroid(27122):   at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <0ad2222fd7074badb5de547b1521aab0>:0 
01-09 11:05:04.496 I/MonoDroid(27122):   at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualInt32Method (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <0ad2222fd7074badb5de547b1521aab0>:0 
01-09 11:05:04.496 I/MonoDroid(27122):   at Android.Util.SparseArray.Size () [0x0000a] in <ad2f15102b3a4d36b40e9b0cbc11c376>:0 
01-09 11:05:04.496 I/MonoDroid(27122):   at MyWO.Android.Adapter.Workorder.WorkOrderHeaderAdapter.get_ItemCount () [0x0000d] in D:\MyWO.Mobile\MyWO\MyWO.Android\Adapter\Workorder\WorkOrderHeaderAdapter.cs:27 
01-09 11:05:04.496 I/MonoDroid(27122):   at Android.Support.V7.Widget.RecyclerView+Adapter.n_GetItemCount (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <7cd821e41c6245e986359cd08947256b>:0 
01-09 11:05:04.496 I/MonoDroid(27122):   at (wrapper dynamic-method) System.Object.35(intptr,intptr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...