Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

Legacy code

MainActivity::

onCreate()

Tablet

ListFragment::

onClick()

MainActivity::

showDetail()

  public boolean isDualPane()

{

FragmentManager fragmentManager =

Fragment detailFragment = fragmentManager.findFragmentById( R.id.detail_fragment );

return detailFragment != null && detailFragment.getVisibility() == View.VISIBLE;

}

Yes

MainActivity::

update()

DetailFragment::

onClick()

Phone

No

MainActivity::

startDetail()

DetailActivity::

onCreate()

DetailFragment::

onClick()

-public void onCreate( Bundle bundle )

+public View onCreateView( LayoutInflater inflater,

+ ViewGroup container,

+ Bundle savedInstanceState )

{

- super.onCreate( bundle );

+ super.onCreateView( inflater, container, savedInstanceState );

-setContentView( R.layout.welcome );

+View layout = inflater.inflate( R.layout.welcome, container, false );

The Fragment

Transition

Corey Leigh Latislaw

@corey_latislaw

You?

Training

?

"Sub activity"

Life cycle

https://github.com/xxv/android-lifecycle

What + Why?

Config changes

1

Transition

2

Fragment

Record

2.isInLayout()

Manager

1

Replace

Add

Transaction

Remove

Busine$$ Case

Combine

Back stack

Fragments

Landscape

Independent

form factors

Reuse

A History

Fragment1

Flexible

droiddog.com/android-blog/2011/03/2011-the-year-of-fierce-competition/honeycomb-bee-550x550-e1296765261166/

Modular

Why not?

Options

http://developer.android.com/reference/android/support/v4/app/package-summary.html

v4 supports API 4+ (Donut, 1.6+)

v13 support API 13+ (Honeycomb, 3.2+)

Framework only API 11+ (Honeycomb, 3.0+)

http://developer.android.com/reference/android/support/v13/app/package-summary.html

Fragment2

Remix

Honeycomb

3.0

API 11

Schedule

1 billion Active Users

113 billion installs

236% more app installs

Activity

HIGH Risk

New

Training

Fragments

Refactor

Market Share

Source: http://www.idc.com/getdoc.jsp?containerId=prUS24857114

http://thenextweb.com/google/2014/06/25/google-activations-io-2014/

Code!

Global Shipments

Idea

Lead or follow?

MyActivity.java

Why?

setContentView(R.layout.main);

I heard you liked fragments ....

Investment

main.xml

Opportunity

mint.com/how-it-works/anywhere/android-tablet/

WelcomeFragment.java

<fragment

android:name="com.example.WelcomeFragment"/>

inflater.inflate(R.layout.welcome, container, false);

Leadership

We are here!

f6

f1

welcome.xml

<TextView/>

Idea

2 fragments

1

Start

Update

Activity

New

Activity

Master/Detail

Update

Start

Back

Start

Android

Magic

f6

Get XML

Declare

layout

Code!

Multiple Fragments,

Multiple Activities

1

Form factor?

Single Pane

activity_welcome.xml

main.xml

Show

layout

2

...

<fragment

    android:id="@+id/welcome"

android:name="com.example.WelcomeFragment"

    android:layout_width="match_parent"

android:layout_height="match_parent" />

...

ListFragment

main.xml

detail.xml

ListFragment

DetailFragment

DetailFragment

Dual Pane

WelcomeActivity.java

3

Write

fragment

{

activity_welcome.xml

Activity

FragmentActivity

Note: Default detail view

...

<fragment

    android:id="@+id/welcome"

android:name="com.example.WelcomeFragment"

    android:layout_width="300dp"

android:layout_height="match_parent" />

Approaches

public class WelcomeActivity extends

{

@Override

public void onCreate (Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_welcome);

}

public void showDetail()

{

if (isDualPane())

{ ... }

}

public boolean isDualPane()

{

// determine and return

}

}

Engineering

Case

WelcomeFragment.java

{

Fragment

ListFragment

DialogFragment

<fragment

    android:id="@+id/hello"

android:name="com.example.HelloFragment"   

android:layout_width="600dp"

android:layout_height="match_parent" />

...

PreferenceFragment

public class WelcomeFragment extends

{

...

@Override

public View onCreateView (LayoutInflater inflater,

ViewGroup container,

Bundle savedInstanceState)

{

View layout = inflater.inflate(R.layout.fragment_welcome, container, false);

      TextView welcomeText = (TextView) layout.findViewById(R.id.welcome_text);

return layout;

}

...

}

fragment_welcome.xml

public showDetail() {

    // Update current view

if (isDualPane())

{

update();

}

// Start new activity

else

{

startDetailActivity();

}

}

Start from scratch

Dual pane?

{

getFragmentManager();

getSupportFragmentManager();

...

<TextView

android:id="@+id/welcome_text"

    android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world_string" />

...

ish

New APIs

Full renovation

Best Practices

Start from here

  • Action bar + tabs
  • Action bar + "list"-based navigation
  • Transition animations
  • Automatic back stack management
  • Configuration changes

http://thenextweb.com/google/2014/06/25/google-activations-io-2014/

Tablets won't catch on

62% of tablets

46% last year

1

Extend

Activity ||

FragmentActivity

Converting

MyActivity.java

-import android.app.Activity;

+import android.support.v4.app.FragmentActivity;

-public class MyActivity extends Activity {

+public class MyActivity extends FragmentActivity {

2

http://marketingland.com/study-android-tablet-users-surpass-ipad-users-by-34m-in-q1-with-tablet-usage-up-282-since-2011-2-4774

Prediction: ~70% global tablet users will be Android by 2016

Move activity code

into fragment

WelcomeFragment.java

Technical debt

4

...

public class WelcomeFragment extends Fragment {

// Activity's code

}

Inflate

XML

3

bit rot

WelcomeFragment.java

onCreate() ->

onCreateView()

WelcomeFragment.java

5

Obsolete

sevaeunplugged.wordpress.com/2011/09/13/ostrich-therapy

Use layout

to find views

WelcomeFragment.java

- welcomeText = (TextView) findViewById( R.id.welcome_text );

+ welcomeText = (TextView) layout.findViewById( R.id.welcome_text );

6

Set

activity

view

7

MyActivity.java

public class WelcomeActivity extends FragmentActivity

{

@Override

protected void onCreate (Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_welcome);

}

}

Fix compile

errors &

other issues

activity_welcome.xml

...

<fragment

    android:id="@+id/welcome"

android:name="com.example.WelcomeFragment"

    android:layout_width="match_parent"

android:layout_height="match_parent" />

...

  • Integrate support library
  • Change target SDK
  • Great time for a refactor!
  • Prepend getActivity()
  • Disentangle logic

<3

Low Risk

  • Code reuse
  • Manage multiple screens
  • No monolithic activities

stackoverflow.com/questions/5695408/so-what-are-the-exact-advantages-of-fragments-in-android-3-0

Must have a host

Fragment

Pre-Honeycomb

12%

f3

Repeat

A

form factors

Back

f5

Comcast Interactive Media

Top Android Developer

>1 million downloads

play.google.com/store/apps/details?id=com.xfinity.tv

androidpolice.com/tags/comcast

94%

May 2012

Update

steps->

Sunesys

7 Minute Workout

Forxiga

f2

73%

Nov 2012

f2

WXPN Radio

Philly ETE

Music Choice

HowAboutWe

28%

Nov 2013

Home Sweet Home

44%

May 2013

Learn more about creating dynamic, engaging presentations with Prezi