Skip to content

Instantly share code, notes, and snippets.

@gavilanch
Created September 16, 2017 19:35
Show Gist options
  • Save gavilanch/e582db9276a9cfdc97d9b469cf175056 to your computer and use it in GitHub Desktop.
Save gavilanch/e582db9276a9cfdc97d9b469cf175056 to your computer and use it in GitHub Desktop.
gist tabs
// newsListActivity.cs
[Activity(Label = "NotiXamarin", MainLauncher = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop)]
public class NewsListActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.NewsList);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
AddTab("All news", new AllNewsListFragment());
AddTab("Saved news", new SavedNewsListFragment());
}
private void AddTab(string tabTitle, Fragment fragment)
{
var tab = ActionBar.NewTab();
tab.SetText(tabTitle);
tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
{
var previousFragment = FragmentManager.FindFragmentById(Resource.Id.newsListFragmentContainer);
if (previousFragment != null)
{
e.FragmentTransaction.Remove(previousFragment);
}
e.FragmentTransaction.Add(Resource.Id.newsListFragmentContainer, fragment);
};
tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
{
e.FragmentTransaction.Remove(fragment);
};
ActionBar.AddTab(tab);
}
// BaseNewsListFragment
public class BaseNewsListFragment: Fragment
{
protected ListView _newsListView;
protected List<News> _news;
public BaseNewsListFragment()
{
_news = new List<News>();
}
protected void SetupFragment()
{
SetupViews();
SetupEvents();
_newsListView.Adapter = new NewsListAdapter(Activity, _news);
}
protected void SetupViews()
{
_newsListView = View.FindViewById<ListView>(Resource.Id.newsListView);
}
protected void SetupEvents()
{
_newsListView.ItemClick += NewsListView_ItemClick;
}
private void NewsListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
var intent = new Intent(Activity, typeof(MainActivity));
var id = (int)e.Id;
intent.PutExtra(MainActivity.KEY_ID, id);
StartActivity(intent);
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.Inflate(Resource.Layout.NewsListFragment, container, false);
}
}
// AllNewsListFragment
public class AllNewsListFragment: BaseNewsListFragment
{
private NewsService _newsService;
public AllNewsListFragment()
{
_newsService = new NewsService();
}
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
if (!_news.Any())
{
_news = _newsService.GetNews();
}
SetupFragment();
}
}
// SavedNewsListFragment
public class SavedNewsListFragment : BaseNewsListFragment
{
private NewsLocalService _newsLocalService;
public SavedNewsListFragment()
{
_newsLocalService = new NewsLocalService();
}
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
_news = _newsLocalService.GetAllSavedForReadLater();
SetupFragment();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment