1

I have a view pager setup with 1 fragment initially, the fragment will populate a linear recycle view for user to perform selection

public class NoAccessPanelActivity : MasterActivity
{
#region Properties
Fragments.NoAccessListFragment _sysNoAccessFragment;
Fragments.CameraFragment _cameraFragment;
Adapters.NoAccessPanelFragmentsAdapter _adapter;

ViewPager viewPager;
TabLayout tabLayout;
private bool _isCameraFragementRemove = false;
#endregion

#region Activity Override
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.NoAccessPanel);
    ComingFrom = Intent.GetStringExtra("ComingFrom");

    InitPanel();
}

protected override void OnResume()
{
    base.OnResume();
    BindHandlers();
}

protected override void OnPause()
{
    UnbindHandlers();
    base.OnPause();
}

public override void OnBackPressed()
{
    if (ProceedDiscardCapturedImage())
        OnBack();
}
#endregion

#region Events
private void _sysNoAccessFragment_OnViewNewFragment(ButtonInListClickedButtonListArgs e)
{
    ShowLoadingPanel("");

    switch (e.ButtonName)
    {
        case "AddCamera":
            if (_cameraFragment == null)
            {
                _cameraFragment = new Fragments.CameraFragment();
                _adapter.AddFragment(_cameraFragment, "Camera");
                //_adapter.AddFragmentWithoutTitle(_cameraFragment);
                _adapter.NotifyDataSetChanged();
            }
            break;
        case "ShowCamera":
            var cameraIndex = _adapter.GetItemIndex(_cameraFragment);
            viewPager.SetCurrentItem(cameraIndex, true);

            break;
        case "RemoveCamera":
            if (_cameraFragment != null)
            {
                _cameraFragment.DeleteAllImages();
                _adapter.RemoveFragment(_cameraFragment, "Camera");
                _adapter.NotifyDataSetChanged();
                _cameraFragment.Dispose();
                _cameraFragment = null;
            }
            break;
    }
}


#endregion

#region Helpers
private void InitPanel()
{

    viewPager = (ViewPager)FindViewById(Resource.Id.viewpager);
    SetupViewPager(viewPager);

    tabLayout = (TabLayout)FindViewById(Resource.Id.tabs);
    tabLayout.SetupWithViewPager(viewPager);
}

private void SetupViewPager(ViewPager viewPager)
{
    _sysNoAccessFragment = new Fragments.NoAccessListFragment();
    _adapter = new Adapters.NoAccessPanelFragmentsAdapter(SupportFragmentManager);
    _adapter.AddFragment(_sysNoAccessFragment, "No Access");
    viewPager.Adapter = _adapter;
    viewPager.AdapterChange += ViewPager_AdapterChange;
}



private void BindHandlers()
{
    NextButton.Click += NextButton_Click;
    _sysNoAccessFragment.OnViewNewFragment += _sysNoAccessFragment_OnViewNewFragment;
    tabLayout.TabSelected += TabLayout_TabSelected;
}

private void UnbindHandlers()
{
    NextButton.Click -= NextButton_Click;
    _sysNoAccessFragment.OnViewNewFragment -= _sysNoAccessFragment_OnViewNewFragment;
    tabLayout.TabSelected -= TabLayout_TabSelected;
}


#endregion
}

When user select item from recycle view, view pager will add or remove new fragment based on which item user select

 #region Events
private void _sysNoAccessFragment_OnViewNewFragment(ButtonInListClickedButtonListArgs e)
{
    switch (e.ButtonName)
    {
        case "AddCamera":
            if (_cameraFragment == null)
            {
                _cameraFragment = new Fragments.CameraFragment();
                _adapter.AddFragment(_cameraFragment, "Camera");
                //_adapter.AddFragmentWithoutTitle(_cameraFragment);
                _adapter.NotifyDataSetChanged();
            }
            break;
        case "ShowCamera":
            var cameraIndex = _adapter.GetItemIndex(_cameraFragment);
            viewPager.SetCurrentItem(cameraIndex, true);

            break;
        case "RemoveCamera":
            if (_cameraFragment != null)
            {
                _cameraFragment.DeleteAllImages();
                _adapter.RemoveFragment(_cameraFragment, "Camera");
                _adapter.NotifyDataSetChanged();
                _cameraFragment.Dispose();
                _cameraFragment = null;
            }
            break;
    }
}

First selection, view pager adapter add camera fragment successfully. Second selection, view pager need to remove camera fragment due to item selected from the list,my code run into break mode with message "Java.Lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference occurred"

What make things worse is i cant find any code that trigger this exception, below is the information i can find on device log caterror log from device logcat

Soon Ee
  • 73
  • 12
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Talendar Sep 19 '18 at 10:58

0 Answers0