2015-06-14 4 views
5

Я новичок в Android, и я хочу знать, почему это, что, когда я помещаю свою setContentView() после определения TextView, мое приложение падает, т.е.Где разместить setContentView() в onCreate()?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv=(TextView) findViewById(R.id.tv); 
    Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES| 
      Linkify.PHONE_NUMBERS); 
    setContentView(R.layout.activity_main);  //After TextView 
} 

Но когда я поставьте мой setContentView() перед определением TextView, тогда мое приложение работает нормально.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); //Before TextView 
    TextView tv=(TextView) findViewById(R.id.tv); 
    Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES| 
      Linkify.PHONE_NUMBERS); 
} 

Почему это, что & и как добавление setContentView(), прежде чем делает разницу ?

ответ

8

setContentView() буквально задает виды вашей деятельности. Если вы попытаетесь сделать что-то вроде TextView tv=(TextView) findViewById(R.id.tv);, тогда нет никакого вида для поиска, потому что вы еще не определили свои мнения, и, таким образом, ваше приложение выйдет из строя. Вот почему вы должны поставить setContentView(), прежде чем пытаться получить доступ к своим представлениям.

+0

Мне было интересно, можете ли вы помочь мне с этим вопросом http://goo.gl/d5opg5. Я обещаю, что это не одно из вопросов «исправление для меня». – Axel

0

Вы можете выполнить любой код, который вы хотите, до метода setContentView(), если он не относится к (частям) вида, который еще не установлен.

Поскольку ваша переменная tv относится к содержимому View, она не может быть выполнена.

0

Когда вы определяете setContentView() после объявления TextView, вы ошибаетесь, потому что идентификатор объекта, который вы инициализируете в TextView, содержится внутри этого макета, неизвестно в классе до выполнения seConteView().

Смежные вопросы