Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 366
kencorbin Avatar asked Sep 17 '10 14:09

kencorbin


2 Answers

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(), ""); 
like image 183
mikeplate Avatar answered Oct 05 '22 19:10

mikeplate


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); 
like image 31
moonlightdock Avatar answered Oct 05 '22 20:10

moonlightdock