У меня изначально установлена пейджер вида с 1 фрагментом, фрагмент заполняет линейное представление рециркуляции, чтобы пользователь мог выполнить выбор
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
}
Когда пользователь выбирает элемент из вида рециркуляции, пейджер представления добавляет или удаляетновый фрагмент, в зависимости от того, какой элемент пользователь выбирает
#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;
}
}
Первый выбор, просмотр адаптера пейджера, успешно добавьте фрагмент камеры.Второй выбор: просмотр пейджера требует удаления фрагмента камеры из-за элемента, выбранного из списка, мой код работает в режиме прерывания с сообщением "Java.Lang.NullPointerException: попытка вызвать виртуальный метод" int android.view.View.getVisibility() 'на нулевой ссылке на объект произошла "
Что еще хуже, я не могу найти любой код, который вызывает это исключение, ниже приведена информация, которую я могу найти в журнале устройства cat 