Как получить ссылку TextView из пользовательского ImageView?

Я хотел бы спросить, есть ли какие-либо способы получить представление из другого представления.

Мой случай таков: у меня есть пользовательский вызов ImageView MyImageView. и мой макет таков:

FrameLayout:
  MyImageView 
  LiearLayout:
      LiearLayout: 
          TextView 
      LiearLayout:
          TextView

У меня есть код в MyImageView, и я хотел бы отредактировать текст в TextView под LinearLayout.

мой код в MyImageView для выбора TextView:

TextView textView = (TextView) findViewById(id.TextView01);

Однако textView всегда имеет значение null, и я не могу установить текст, который предпочитаю.

Более того, если я закодирую это:

TextView textView = (TextView) findViewById(R.id.TextView01);

Eclipse выдаст мне ошибку и скажет, что не может разрешить идентификатор.

Итак, есть ли какие-либо методы редактирования TextView из ImageView?


person eRIcYang    schedule 24.10.2010    source источник


Ответы (2)


Во-первых... это ужасная идея (на вашем месте я бы с ума сошел). И это большой сигнал о том, что вам нужно переосмыслить, как делать макет.

В любом случае, использование метода getParent может сработать:

// in your MyImageView
FrameLayout parent = (FrameLayout)getParent();
TextView textView = (TextView) parent.findViewById(R.id.TextView01);

Это не работает так, как вы это делаете, поскольку TextViews не находится внутри вашего пользовательского представления.

person Cristian    schedule 24.10.2010
comment
Спасибо. Оно работает. На самом деле, я что-то сомневаюсь в том, должно ли событие касания быть реализовано в представлении или активности. На этот раз я выбираю реализацию в представлении. Итак, проблема вышла! :( - person eRIcYang; 25.10.2010

Я думаю, вы всегда можете вызвать getRootView() и оттуда вы можете искать представление по идентификатору. Пока идентификаторы уникальны в текущей иерархии представлений, вы должны иметь возможность захватить textView независимо от того, где он находится в иерархии.

Так похоже на другой ответ

TextView textView = (TextView) getRootView().findViewById(R.id.textview_01);

если он на том же экране, он будет там всегда.

person Greg Giacovelli    schedule 25.10.2010