Be at the cutting edge of the next property boom, and build the next awesome tech property tool. Our Real Estate property template for Android features a clean UI you can see in the app template is just waiting to be hooked up to a realty API or a realty website backend. Perfect for either rentals or purchases. If you’re looking to build the next Zillow or a Real Estate agent looking for the edge in capturing the market on the go, this app template is the perfect place to start.
package com.realestate;
import java.util.ArrayList;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.realestate.custom.CustomActivity;
import com.realestate.model.Data;
import com.realestate.ui.FeedList;
import com.realestate.ui.LeftNavAdapter;
import com.realestate.ui.MapViewer;
import com.realestate.ui.Search;
import com.realestate.ui.SearchResult;
// TODO: Auto-generated Javadoc
/**
* The Class MainActivity is the base activity class of the application. This
* activity is launched after the Splash and it holds all the Fragments used in
* the app. It also creates the Navigation Drawer on left side.
*/
public class MainActivity extends CustomActivity
{
/** The drawer layout. */
private DrawerLayout drawerLayout;
/** ListView for left side drawer. */
private ListView drawerLeft;
/** The drawer toggle. */
private ActionBarDrawerToggle drawerToggle;
/** The left navigation list adapter. */
private LeftNavAdapter adapter;
/* (non-Javadoc)
* @see com.newsfeeder.custom.CustomActivity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupContainer();
setupDrawer();
}
/**
* Setup the drawer layout. This method also includes the method calls for
* setting up the Left side drawer.
*/
private void setupDrawer()
{
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerClosed(View view)
{
setActionBarTitle();
}
@Override
public void onDrawerOpened(View drawerView)
{
getActionBar().setTitle(R.string.app_name);
}
};
drawerLayout.setDrawerListener(drawerToggle);
drawerLayout.closeDrawers();
setupLeftNavDrawer();
}
/**
* Setup the left navigation drawer/slider. You can add your logic to load
* the contents to be displayed on the left side drawer. You can also setup
* the Header and Footer contents of left drawer if you need them.
*/
private void setupLeftNavDrawer()
{
drawerLeft = (ListView) findViewById(R.id.left_drawer);
adapter = new LeftNavAdapter(this, getDummyLeftNavItems());
drawerLeft.setAdapter(adapter);
drawerLeft.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long arg3)
{
drawerLayout.closeDrawers();
launchFragment(pos);
}
});
}
/**
* This method returns a list of dummy items for left navigation slider. You
* can write or replace this method with the actual implementation for list
* items.
*
* @return the dummy items
*/
private ArrayList<Data> getDummyLeftNavItems()
{
ArrayList<Data> al = new ArrayList<Data>();
al.add(new Data("Feed", R.drawable.ic_nav1, R.drawable.ic_nav1_sel));
al.add(new Data("Search", R.drawable.ic_nav2, R.drawable.ic_nav2_sel));
al.add(new Data("Map", R.drawable.ic_nav3, R.drawable.ic_nav3_sel));
al.add(new Data("Search Results", R.drawable.ic_nav4,
R.drawable.ic_nav4_sel));
return al;
}
/**
* This method can be used to attach Fragment on activity view for a
* particular tab position. You can customize this method as per your need.
*
* @param pos
* the position of tab selected.
*/
private void launchFragment(int pos)
{
Fragment f = null;
String title = null;
if (pos == 0)
{
title = "Feed";
f = new FeedList();
}
else if (pos == 1)
{
title = "Search";
f = new Search();
}
else if (pos == 2)
{
title = "Map";
f = new MapViewer();
}
else if (pos == 3)
{
title = "Search Results";
f = new SearchResult();
}
if (f != null)
{
while (getSupportFragmentManager().getBackStackEntryCount() > 0)
{
getSupportFragmentManager().popBackStackImmediate();
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, f).addToBackStack(title)
.commit();
if (adapter != null)
adapter.setSelection(pos);
}
}
/**
* Setup the container fragment for drawer layout. The current
* implementation of this method simply calls launchFragment method for tab
* position 0. You can customize this method as per your need to display
* specific content.
*/
private void setupContainer()
{
getSupportFragmentManager().addOnBackStackChangedListener(
new OnBackStackChangedListener() {
@Override
public void onBackStackChanged()
{
setActionBarTitle();
}
});
launchFragment(0);
}
/**
* Set the action bar title text.
*/
private void setActionBarTitle()
{
if (drawerLayout.isDrawerOpen(drawerLeft))
{
getActionBar().setTitle(R.string.app_name);
return;
}
if (getSupportFragmentManager().getBackStackEntryCount() == 0)
return;
String title = getSupportFragmentManager().getBackStackEntryAt(
getSupportFragmentManager().getBackStackEntryCount() - 1)
.getName();
getActionBar().setTitle(title);
getActionBar().setLogo(R.drawable.icon);
}
/* (non-Javadoc)
* @see android.app.Activity#onPostCreate(android.os.Bundle)
*/
@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
drawerToggle.syncState();
}
/* (non-Javadoc)
* @see android.app.Activity#onConfigurationChanged(android.content.res.Configuration)
*/
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggle
drawerToggle.onConfigurationChanged(newConfig);
}
/*@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}*/
/* (non-Javadoc)
* @see com.newsfeeder.custom.CustomActivity#onOptionsItemSelected(android.view.MenuItem)
*/
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (drawerToggle.onOptionsItemSelected(item))
{
return true;
}
return super.onOptionsItemSelected(item);
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentActivity#onKeyDown(int, android.view.KeyEvent)
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
if (getSupportFragmentManager().getBackStackEntryCount() > 1)
{
getSupportFragmentManager().popBackStackImmediate();
}
else
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}