i have done through tablistner and storing chat information in static list,
/// <summary>
/// Listener that handles the selection of a tab in the user interface
/// </summary>
/// <typeparam name="T"></typeparam>
public class TabListener<T> : Java.Lang.Object, ActionBar.ITabListener
where T : Fragment
{
private T _fragment;
/// <summary>
/// Initializes a new instance of the tab listener
/// </summary>
///
public TabListener(T fragment)
{
_fragment = fragment;
}
/// <summary>
/// Handles the reselection of the tab
/// </summary>
///
///
public void OnTabReselected(ActionBar.Tab tab, FragmentTransaction
ft)
{
}
/// <summary>
/// Adds the fragment when the tab was selected
/// </summary>
///
///
public void OnTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
Fragment fragment = null;
if (tab.Text == "Users")
{
fragment = Global.UserFragment;
}
else
{
fragment = Global.ChatWindows.FirstOrDefault(chat =>
chat.User.Name == tab.Text);
tab.SetIcon(Resource.Drawable.message);
}
Global.CurrentFragment = fragment;
FragmentManager fm = Global.QActivity.FragmentManager;
fm.BeginTransaction().Add(Resource.Id.Frame_container, fragment,
tab.Text).Commit();
}
/// <summary>
/// Removes the fragment when the tab was deselected
/// </summary>
///
///
public void OnTabUnselected(ActionBar.Tab tab, FragmentTransaction
ft)
{
Fragment fragment = null;
if (tab.Text == "Users")
{
fragment = Global.UserFragment;
}
else
{
fragment = Global.ChatWindows.FirstOrDefault(chat =>
chat.User.Name == tab.Text);
tab.SetIcon(Resource.Drawable.QChatOffline);
}
FragmentManager fm = Global.QActivity.FragmentManager;
fm.BeginTransaction().Remove(fragment).Commit();
}
}
and when message get from other user or we select user to chat then i
handled it using below
try
{
User user = GetUserByName(userName);
ChatFragment chatFragment =
Global.ChatWindows.Find(chatWindow => chatWindow.User.Name == user.Name);
var ft = this.activity.FragmentManager.BeginTransaction();
if (chatFragment == null)
{
chatFragment = new ChatFragment();
chatFragment.User = user;
chatFragment.CurrentUser = Global.Host.Username;
var chatTab = this.activity.ActionBar.NewTab();
chatFragment.TabListener = new
TabListener<ChatFragment>(chatFragment);
chatTab.SetTabListener(chatFragment.TabListener);
chatTab.SetIcon(Resource.Drawable.message);
chatTab.SetText(userName);
// Add the new tab to the action bar
this.activity.ActionBar.AddTab(chatTab);
ft.Add(Resource.Id.Frame_container, chatFragment,
user.Name);
Global.ChatWindows.Add(chatFragment);
this.activity.ActionBar.SelectTab(chatTab);
Global.CurrentFragment = chatFragment;
ft.Commit();
}
else
{
int index = Global.ChatWindows.FindIndex(chat =>
chat.User.Name == chatFragment.User.Name);
ActionBar.Tab tab =
this.activity.ActionBar.GetTabAt(index + 1);
tab.SetIcon(Resource.Drawable.message);
if (selectedFromList)
{
ft.Remove(chatFragment);
ft.Commit();
Global.CurrentFragment = chatFragment;
try
{
var fragmentTransaction =
this.activity.FragmentManager.BeginTransaction();
this.activity.ActionBar.SelectTab(tab);
fragmentTransaction.Commit();
}
catch (Exception ex)
{
}
}
else
{
ft.Remove(chatFragment);
ft.Add(Resource.Id.Frame_container, chatFragment,
user.Name);
ft.Commit();
}
}
I hope if anyone wants single activity with multiple fragments using action
bar tab then it will help.
--
View this message in context:
http://mono-for-android.1047100.n5.nabble.com/Switch-between-fragmnets-action-bar-tab-interface-tp5711339p5711704.html
Sent from the Mono for Android mailing list archive at Nabble.com.
_______________________________________________
Monodroid mailing list
[email protected]
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid