我MainActivity
具有BottomNavigationBar
有4個選項卡,創建新的片段:片段Xamarin的Android
public class MainActivity : AppCompatActivity
{
int mainFragmentLayout;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
mainFragmentLayout = Resource.Id.fragmentLayout;
var bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
//Item in Navigation Bar clicked
bottomNavigation.NavigationItemSelected += (s, e) =>
{
switch (e.Item.ItemId)
{
case Resource.Id.action_home:
//Create Fragment View when Item is Clicked
Fragment homeFragment = new HomeLayoutFragment();
FragmentTransaction homeFragmentTx = FragmentManager.BeginTransaction();
homeFragmentTx.Replace(mainFragmentLayout, homeFragment);
homeFragmentTx.Commit();
break;
case Resource.Id.action_map:
//Create Fragment View when Item is Clicked
/*
Fragment mapFragment = new MapLayoutFragment();
FragmentTransaction mapFragmentTx = FragmentManager.BeginTransaction();
mapFragmentTx.Replace(mainFragmentLayout, mapFragment);
mapFragmentTx.Commit();
*/
break;
case Resource.Id.action_camera:
//Create Fragment View when Item is Clicked
Fragment cameraFragment = new CameraLayoutFragment();
FragmentTransaction cameraFragmentTx = FragmentManager.BeginTransaction();
cameraFragmentTx.Replace(mainFragmentLayout, cameraFragment);
cameraFragmentTx.Commit();
break;
case Resource.Id.action_profile:
//Create Fragment View when Item is Clicked
Fragment profileFragment = new ProfileLayoutFragment();
FragmentTransaction profileFragmentTx = FragmentManager.BeginTransaction();
profileFragmentTx.Replace(mainFragmentLayout, profileFragment);
profileFragmentTx.Commit();
break;
default:
break;
}
};
從那裏,當我去到homeFragment
,我創建了一個ImageButtons
裏面GridView
。
class HomeLayoutFragment : Fragment
{
private const string TAG = "InfiniteScroll";
private GridView _gridView;
private MySimpleItemLoader _mySimpleItemLoader;
private MyGridViewAdapter _gridviewAdapter;
private readonly object _scrollLockObject = new object();
private const int ItemsPerPage = 24;
private const int LoadNextItemsThreshold = 6;
Context context;
public override void OnAttach(Context context)
{
base.OnAttach(context);
this.context = context;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate(Resource.Layout.HomeGridView, container, false);
_mySimpleItemLoader = new MySimpleItemLoader();
_mySimpleItemLoader.LoadMoreItems(ItemsPerPage);
_gridView = view.FindViewById<GridView>(Resource.Id.gridview);
if (IsAdded)
{
_gridviewAdapter = new MyGridViewAdapter(context, _mySimpleItemLoader);
_gridView.Adapter = _gridviewAdapter;
_gridView.Scroll += KeepScrollingInfinitely;
}
return view;
}
private void KeepScrollingInfinitely(object sender, AbsListView.ScrollEventArgs args)
{
lock (_scrollLockObject)
{
var mustLoadMore = args.FirstVisibleItem + args.VisibleItemCount >= args.TotalItemCount - LoadNextItemsThreshold;
if (mustLoadMore && _mySimpleItemLoader.CanLoadMoreItems && !_mySimpleItemLoader.IsBusy)
{
_mySimpleItemLoader.IsBusy = true;
Log.Info(TAG, "Requested to load more items");
_mySimpleItemLoader.LoadMoreItems(ItemsPerPage);
_gridviewAdapter.NotifyDataSetChanged();
_gridView.InvalidateViews();
}
}
}
}
我期望的行爲是ImageButtons
內GridView
點擊時,創建一個新的Fragment
它添加到我的MainActivity
FragmentManger
。 從Fragment
內部創建這些動態Fragments
的最佳方法是什麼?
我應該在homeFragment
課程中使用FragmentActivity
嗎?我應該使用ViewPager
和Fragments
嗎?我一整天都在看,而且我不確定最好的方法再被使用了。 謝謝。