How can I get context from a view?
Replace:
context = context;
with:
this.context = context;
so that you set the value of your field. As it stands, you are setting a method parameter to itself.
How to get Context in Android MVVM ViewModel
What I ended up doing instead of having a Context directly in the ViewModel, I made provider classes such as ResourceProvider that would give me the resources I need, and I had those provider classes injected into my ViewModel
Getting activity from context in android
From your Activity
, just pass in this
as the Context
for your layout:
ProfileView pv = new ProfileView(this, null, temp, tempPd);
Afterwards you will have a Context
in the layout, but you will know it is actually your Activity
and you can cast it so that you have what you need:
Activity activity = (Activity) context;
What is 'Context' on Android?
Putting it simply:
As the name suggests, it's the context of the current state of the application/object. It lets newly-created objects understand what has been going on. Typically you call it to get information regarding another part of your program (activity and package/application).
You can get the context by invoking getApplicationContext()
, getContext()
, getBaseContext()
or this
(when in a class that extends from Context
, such as the Application, Activity, Service and IntentService classes).
Typical uses of context:
Creating new objects:
Creating new views, adapters, listeners:TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);Accessing standard common resources:
Services like LAYOUT_INFLATER_SERVICE, SharedPreferences:context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);Accessing components implicitly:
Regarding content providers, broadcasts, intentgetApplicationContext().getContentResolver().query(uri, ...);
Android context for LayoutInflater
First of all you have to initialize LayoutInflater like this
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
And them inflate your view like this
view = mInflater.inflate(R.layout.your_layout, null);
Get root view from current activity
If you need root view of your activity (so you can add your contents there) use
findViewById(android.R.id.content).getRootView()
Also it was reported that on some devices you have to use
getWindow().getDecorView().findViewById(android.R.id.content)
instead.
Please note that as Booger reported, this may be behind navigation bar (with back button etc.) on some devices (but it seems on most devices it is not).
If you need to get view that you added to your activity using setContentView()
method then as pottedmeat wrote you can use
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
But better just set id to this view in your xml layout and use this id instead.
Related Topics
Easier Way to Get View's Id (String) by Its Id (Int)
How to Call a Wcf Service Using Ksoap2 on Android
How to Enable Internal App Sharing for Android
Android Gcm Sender_Id, How to Get It
Restarting a Device Programmatically
How to Find The Amount of Free Storage (Disk Space) Left on Android
End Incoming Call Programmatically
How to Fix Android Studio Getting Stuck Executing Gradle Tasks
How to Click a Button Programmatically for a Predefined Intent
How to Change Android:Windowsoftinputmode Value from Java Class
How to Create a Persistent Alarmmanager
Handle Screen Orientation Changes When There Are Asynctasks Running
Adb Shell Su Works But Adb Root Does Not