我最初有一个包含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 ()'出现空对象引用”