Android: findviewbyid: поиск представления по идентификатору, когда представление не на том же макете, вызванном setContentView - PullRequest
44 голосов
/ 16 февраля 2010

У меня есть действие MyActivity, которое расширяется от MapActivity. В XML-файл, содержащий макет, я могу включить только 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"
/>

Однако мне нужно найти другое представление, которое находится в другом XML-файле. К сожалению, findViewById возвращает ноль. Как я могу получить вид, который я ищу?

Большое спасибо!

Ответы [ 5 ]

72 голосов
/ 16 февраля 2010

Спасибо за комментарий, я понимаю, что вы имеете в виду, но я не хотел проверять старые значения. Я просто хотел получить указатель на это представление.

Глядя на чужой код, я только что нашел обходной путь, вы можете получить доступ к корню макета, используя LayoutInflater.

Код следующий, где this - это действие:

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);

Вам необходимо получить inflater для контекста this, получить доступ к корневому представлению через метод inflate и, наконец, вызвать findViewById в корневом представлении макета.

Надеюсь, это кому-нибудь пригодится! Bye

5 голосов
/ 03 июля 2015

Я изменил свою деятельность, но повлиял. Вот мой код:

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) {

        }

    }
4 голосов
/ 10 октября 2012

попробовать:

Activity parentActivity = this.getParent();
if (parentActivity != null)
{
    View landmarkEditNameView = (EditText) parentActivity.findViewById(R.id. landmark_name_dialog_edit);
}
2 голосов
/ 18 февраля 2019

Еще один способ сделать это:

// 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);
0 голосов
/ 16 февраля 2010

Это невозможно. Вы можете только найти и получить доступ к представлениям, которые в настоящее время работают. Если вы хотите проверить значение ex. TextView, используемый в предыдущей деятельности, вы должны сохранить значение SharedPreferences, базу данных, файл или передать Intent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...