Why isn't there a getContentView() method for Activity?

AndroidAndroid LayoutAndroid View

Android Problem Overview


The Activity class has a setContentView() method. The PopupWindow Class has a getContentView() method but nothing else does. Is there another way to get the main content view for an activity?

Android Solutions


Solution 1 - Android

I was able to get to the contents of an Activity with this call:

ViewGroup view = (ViewGroup)getWindow().getDecorView();

You should probably check that getDecorView returns an instanceof ViewGroup for all cases, but with a LinearLayout in the Activity the code above runs fine. To get to the LinearLayout you could then just:

LinearLayout content = (LinearLayout)view.getChildAt(0);

And if you have a function like this:

void logContentView(View parent, String indent) {
    Log.i("test", indent + parent.getClass().getName());
    if (parent instanceof ViewGroup) {
        ViewGroup group = (ViewGroup)parent;
        for (int i = 0; i < group.getChildCount(); i++)
            logContentView(group.getChildAt(i), indent + " ");
    }
}

You could iterate through all views and log their class names with the following call inside your Activity:

logContentView(getWindow().getDecorView(), "");

Solution 2 - Android

Following line will do the trick:

findViewById(android.R.id.content);

it is essentially same as (it needs to be called on the context of an Activity)

this.findViewById(android.R.id.content);

Solution 3 - Android

I'm looking for this as well, but I just thought that it might be easier to add an id to the outermost ViewGroup.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/outer">
    <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">

I'll keep looking for a few more minutes, though. I'm into it so that I can use findViewWithTag from the outermost layout.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkencorbinView Question on Stackoverflow
Solution 1 - AndroidmikeplateView Answer on Stackoverflow
Solution 2 - AndroidmoonlightdockView Answer on Stackoverflow
Solution 3 - AndroidbibbyView Answer on Stackoverflow