Add logic to show layouts depending on tab selected

This commit is contained in:
Ricardo Carrillo Cruz 2013-05-04 13:21:40 +02:00
parent 51b6de2c76
commit 8010203412
1 changed files with 137 additions and 23 deletions

View File

@ -3,31 +3,73 @@ package com.rcarrillocruz.android.openstackdroid;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
public class CloudBrowserActivity extends FragmentActivity implements ActionBar.TabListener {
public class CloudBrowserActivity extends Activity implements TabListener {
private Fragment mListFragmentAttached;
private Fragment mServerListFragment;
private Fragment mServerDetailsFragment;
private Fragment mVolumeListFragment;
private Fragment mVolumeDetailsFragment;
private boolean isDetailEnabled;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isDetailEnabled = false;
mListFragmentAttached = null;
mServerListFragment = null;
mServerDetailsFragment = null;
mVolumeListFragment = null;
mVolumeDetailsFragment = null;
setContentView(R.layout.cloud_browser);
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
ActionBar.Tab serverTab = actionBar.newTab().setText("Instances");
ActionBar.Tab volumeTab = actionBar.newTab().setText("Volumes");
ActionBar.Tab serverTab = actionBar.newTab().setText("Instances").setTabListener(this);
ActionBar.Tab imageTab = actionBar.newTab().setText("Images").setTabListener(this);
ActionBar.Tab flavorTab = actionBar.newTab().setText("Flavors").setTabListener(this);
serverTab.setTabListener(this);
volumeTab.setTabListener(this);
actionBar.addTab(serverTab);
actionBar.addTab(imageTab);
actionBar.addTab(flavorTab);
}
actionBar.addTab(volumeTab);
//actionBar.addTab(flavorTab);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
if(isDetailEnabled) {
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 0);
FrameLayout fl = (FrameLayout) findViewById(R.id.item_details);
fl.setLayoutParams(params);
setDetailEnabled(false);
} else {
Intent i = new Intent(this, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
@ -38,27 +80,99 @@ public class CloudBrowserActivity extends FragmentActivity implements ActionBar.
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
Class<?> tabClass = null;
switch(tab.getPosition()) {
case 0:
tabClass = ServerListFragment.class;
break;
case 1:
tabClass = VolumeListFragment.class;
break;
}
hideDetailsLayout();
mListFragmentAttached = getFragmentManager().findFragmentById(R.id.items_list);
if(mListFragmentAttached==null) {
mListFragmentAttached = Fragment.instantiate(this, tabClass.getName());
if (tabClass == ServerListFragment.class) {
mServerListFragment = mListFragmentAttached;
} else if (tabClass == VolumeListFragment.class) {
mVolumeListFragment = mListFragmentAttached;
}
ft.add(R.id.items_list, mListFragmentAttached);
} else {
if (tabClass == ServerListFragment.class) {
if (mServerListFragment != null) {
mListFragmentAttached = mServerListFragment;
ft.attach(mListFragmentAttached);
} else {
mListFragmentAttached = Fragment.instantiate(this, tabClass.getName());
mServerListFragment = mListFragmentAttached;
ft.add(R.id.items_list, mListFragmentAttached);
}
} else if (tabClass == VolumeListFragment.class) {
if (mVolumeListFragment != null) {
mListFragmentAttached = mVolumeListFragment;
ft.attach(mListFragmentAttached);
} else {
mListFragmentAttached = Fragment.instantiate(this, tabClass.getName());
mVolumeListFragment = mListFragmentAttached;
ft.add(R.id.items_list, mListFragmentAttached);
}
}
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
if (mListFragmentAttached != null)
ft.detach(mListFragmentAttached);
}
public void showDetailsLayout() {
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f);
FrameLayout fl = (FrameLayout) findViewById(R.id.item_details);
fl.setLayoutParams(params);
setDetailEnabled(true);
}
public void hideDetailsLayout() {
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 0);
FrameLayout fl = (FrameLayout) findViewById(R.id.item_details);
fl.setLayoutParams(params);
setDetailEnabled(false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
Intent i = new Intent(this, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
public boolean isDetailEnabled() {
return isDetailEnabled;
}
public void setDetailEnabled(boolean isDetailEnabled) {
this.isDetailEnabled = isDetailEnabled;
}
public Fragment getmServerDetailsFragment() {
return mServerDetailsFragment;
}
public void setmServerDetailsFragment(Fragment mServerDetailsFragment) {
this.mServerDetailsFragment = mServerDetailsFragment;
}
public Fragment getmVolumeDetailsFragment() {
return mVolumeDetailsFragment;
}
public void setmVolumeDetailsFragment(Fragment mVolumeDetailsFragment) {
this.mVolumeDetailsFragment = mVolumeDetailsFragment;
}
}