Android 4 and Fragments: Listing 2
TitlesFragment class.
public class TitlesFragment : ListFragment
{
int _currentPlayId;
bool _isDualPane;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
var adapter = new ArrayAdapter<String>(Activity,
Android.Resource.Layout.SimpleListItem1, StarTrek.Character);
ListAdapter = adapter;
if (savedInstanceState != null)
{
_currentPlayId = savedInstanceState.GetInt("current_play_id", 0);
}
var detailsFrame = Activity.FindViewById<View>(Resource.Id.details);
_isDualPane = detailsFrame != null && detailsFrame.Visibility == ViewStates.Visible;
if (_isDualPane)
{
ListView.ChoiceMode = ChoiceMode.Single;
ShowDetails(_currentPlayId);
}
}
public override void OnListItemClick(ListView l, View v, int position, long id)
{
ShowDetails(position);
}
private void ShowDetails(int playId)
{
_currentPlayId = playId;
if (_isDualPane)
{
// We can display everything in place with fragments.
// Have the list highlight this item and show the data.
ListView.SetItemChecked(playId, true);
// Check what fragment is shown, replace if needed.
var details = FragmentManager.FindFragmentById(Resource.Id.details) as DetailsFragment;
if (details == null || details.ShownPlayId != playId)
{
// Make new fragment to show this selection.
details = DetailsFragment.NewInstance(playId);
// Execute a transaction, replacing any existing
// fragment with this one inside the frame.
var ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.details, details);
ft.SetTransition(FragmentTransit.EnterMask);
ft.Commit();
}
}
else
{
// Otherwise we need to launch a new Activity to display
// the dialog fragment with selected text.
var intent = new Intent();
intent.SetClass(Activity, typeof(DetailsActivity));
intent.PutExtra("current_play_id", playId);
StartActivity(intent);
}
}
}
About the Author
Wallace (Wally) B. McClure has authored books on iPhone programming with Mono/Monotouch, Android programming with Mono for Android, application architecture, ADO.NET, SQL Server and AJAX. He's a Microsoft MVP, an ASPInsider and a partner at Scalable Development Inc. He maintains a blog, and can be followed on Twitter.