2014-09-02 2 views
0

Мое приложение останавливается, когда я объявляю TextView вне метода onCreate, я делаю это, потому что мне нужно также получить доступ к переменной TextView из других методов. Буду благодарен за любую помощь.Объявление переменных вне onCreate - Android

public class MainActivity extends ActionBarActivity { 
    TextView textView = (TextView)findViewById(R.id.defaultText); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 

     textView.setText("Hello"); 
    } 
} 
+0

Просто определите свой TextView как переменную класса (то есть, поместите его в верхнюю часть вашего класса за пределами области действия метода.) – Booger

+0

Посмотрите в журнале Logcat фактическое сообщение об ошибке. Когда вы задаете такой вопрос, включите Logcat info с вашим вопросом. –

+0

@ Далека ответ проясняется при чтении кода. – TehCoder

ответ

2
My application stops when I declare the TextView outside the onCreate method 

Это происходит потому, что макет еще не завышен в своей деятельности, таким образом, разбивая вам приложение, и я 100% уверена, что ошибки NPE при установке текста здесь: textView.setText("Hello");.

Решения:

всегда инициализируется ваш TextView внутри вашего Oncreate после setContentView и иметь свой textView объект как глобальный экземпляр.

public class MainActivity extends ActionBarActivity { 
    TextView textView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 

     textView = (TextView)findViewById(R.id.defaultText); 
     textView.setText("Hello"); 
    } 
} 
2

Вы не можете объявить вид вне функции.

TextView tv; и в OnCreate сделать: tv = (TextView)findViewById(...)

0

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

0

Для этого:

TextView TextView = (TextView) findViewById (R.id.defaultText);

Сначала вы настроили представление содержимого для Activity, если оно не будет работать.

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