Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to share common layout between activities without fragment

Is there any possible way to share layout(part) between activities? For example, in my app, all activities have similar layout, the top part is long operation indicator (a progress bar, hidden when no operation is being executed), the bottom part is for showing errors. Only the middle part is different for all activities. See the picture below.

enter image description here

so my question is, is it possible to reuse the common layout(loading and error part) for all activities in my app? (currently I don't want to use fragment to do it for some reasons)

maybe the layout resources should like this:

layoutfolder

activity_common.xml

activity_one_content.xml

activity_two_content.xml

thanks

like image 551
user3068231 Avatar asked Nov 19 '14 08:11

user3068231


Video Answer


1 Answers

You can create an abstract 'base' activity that all your activities extend from, overriding setContentView to merge the base, and sub activity layouts.

This way you can handle all the loading/error code in the base activity, and simply toggle between hiding and showing the views in the sub activities.

The abstract activity:

public abstract class BaseActivity extends Activity {

    protected RelativeLayout fullLayout;
    protected FrameLayout subActivityContent;

    @Override
    public void setContentView(int layoutResID) {
        fullLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_base, null);  // The base layout
        subActivityContent = (FrameLayout) fullLayout.findViewById(R.id.content_frame);            // The frame layout where the activity content is placed.
        getLayoutInflater().inflate(layoutResID, subActivityContent, true);            // Places the activity layout inside the activity content frame.
        super.setContentView(fullLayout);                                                       // Sets the content view as the merged layouts.
    }

}

the layout file:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/loading_frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/error_frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>
like image 144
Jonathon Fry Avatar answered Nov 13 '22 04:11

Jonathon Fry