Android: findviewbyid: finding view by id when view is not on the same layout invoked by setContentView

AndroidLayout

Android Problem Overview


I have an activity MyActivity that extends from MapActivity. In the .xml file containing the layout I can only include the MapView

<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/trail_map_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="key"
/>

However I do need to find another view that is located in another .xml file. Unfortunately, findViewById returns null. How can I get the view I am looking for?

Thanks a lot!

Android Solutions


Solution 1 - Android

Thanks for commenting, I understand what you mean but I didn't want to check old values. I just wanted to get a pointer to that view.

Looking at someone else's code I have just found a workaround, you can access the root of a layout using LayoutInflater.

The code is the following, where this is an Activity:

final LayoutInflater factory = getLayoutInflater();

final View textEntryView = factory.inflate(R.layout.landmark_new_dialog, null);

landmarkEditNameView = (EditText) textEntryView.findViewById(R.id.landmark_name_dialog_edit);

You need to get the inflater for this context, access the root view through the inflate method and finally call findViewById on the root view of the layout.

Hope this is useful for someone! Bye

Solution 2 - Android

I have changed in my activity but effected. Here is my code:

View layout = getLayoutInflater().inflate(R.layout.list_group,null);
		try {
			LinearLayout linearLayout = (LinearLayout) layout.findViewById(R.id.ldrawernav);
			linearLayout.setBackgroundColor(Color.parseColor("#ffffff"));
        }
		catch (Exception e) {

		}

	}

Solution 3 - Android

try:

Activity parentActivity = this.getParent();
if (parentActivity != null)
{
    View landmarkEditNameView = (EditText) parentActivity.findViewById(R.id. landmark_name_dialog_edit);
}

Solution 4 - Android

Another way to do this is:

// inflate the layout
View myLayout = LayoutInflater.from(this).inflate(R.layout.MY_LAYOUT,null);

// load the text view
TextView myView = (TextView) myLayout.findViewById(R.id.MY_VIEW);

Solution 5 - Android

It's impossible. You can only find and access views that are currently running. If you want to check the value of ex. TextView used in previus activity you must save the value is SharedPreferences, database, file or pass by Intent.

Solution 6 - Android

I used

View.inflate(getContext(), R.layout.whatever, null)

The using of View.inflate prevents the warning of using null at getLayoutInflater().inflate().

Solution 7 - Android

In main Activity just create Static Variable Like below.

    //Create Static variable
    public static View mainView;

     LayoutInflater inflater = getLayoutInflater();
                View view = inflater.inflate(R.layout.activity_home, null);
    
     mainView = view;
   //Now just need to Call MainActivity.mainView to Access your home view or Something else.
 

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
QuestionSantiagoView Question on Stackoverflow
Solution 1 - AndroidSantiagoView Answer on Stackoverflow
Solution 2 - Androiduser5076776View Answer on Stackoverflow
Solution 3 - AndroidrichyView Answer on Stackoverflow
Solution 4 - AndroidJFreemanView Answer on Stackoverflow
Solution 5 - AndroidskymanView Answer on Stackoverflow
Solution 6 - AndroidAvitalView Answer on Stackoverflow
Solution 7 - AndroidFIRE STUDIOView Answer on Stackoverflow