Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.61
snakeas
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 4
#1

Обращение к элементам активити из другого класса - Программирование Android

20.10.2012, 18:50. Просмотров 5470. Ответов 4
Метки нет (Все метки)

Добрый день. Ломаю голову битый час, все не могу понять, почему у меня не получается. Опишу по шагам.
Создал проект андроид (в эклипсе), есть layout-файл activity_main.xml, в нем TextView имеющий id tvHello,
я создал класс Student, в нем есть конструктор и метод, меняющий этот tvHello и при запуске программы:
1. создается объект этого класса
2. открывается layout файл
3. вызывается метод, меняющий TextView.
Но при запуске на эмуляторе приложение вылетает, в LogCat ошибка NullPointerException. Исходники прилагаю.

Main_Activity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.student_sos;
 
import android.os.Bundle;
 
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import com.example.student_sos.Student;;
 
 
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Student st = new Student();
        st.showTextOnView("бла - бла");
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
класс Student:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.student_sos;
import android.widget.TextView;
import android.app.Activity;
import com.example.student_sos.R;
 
public class Student extends Activity {
    String s;
    int tempInt;
    TextView tvHello;
    public Student(){
        tempInt = 1;
        return;
    }
 
    public void showTextOnView(String text){
        
        tvHello = (TextView) findViewById(R.id.tvHello);
        tvHello.setText(text);
        tempInt = 2;
        return;
    }
 
}
Я примерно понимаю в чем проблема, но в голове не могу уместить, почему такое возникает? Activity каким-то образом блокируется? Или что-то еще.
Очень надеюсь на вашу помощь, заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 18:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к элементам активити из другого класса (Программирование Android):

Обращение к элементам фрагмента из активити - Программирование Android
Есть необходимость в программе менять значение TextView находящегося во фрагменте. Фрагмент должен выводится в контейнер. И затем я...

Обращение к элементам другой Активити - Программирование Android
Есть xml-файл главной активити main.xml который содержит поле ввода <EditText android:id="@+id/edPhone" ...

Доступ к элементам Activity из другого класса - Программирование Android
Есть Activity, в её классе создаю экземпляр другого класса twoclass tw = new twoclass(); tw.start(MainActivity.this); и запускаю ...

Обращение к методу другого класса - Программирование Android
Привет Не пинайте за возможный бред, я учусь) В общем мне необходимо вызвать метод класса Auth из другого класса. Сам метод ...

Обращение к textView из другого класса (не MainActivity) в AndroidStudio - Программирование Android
Добрый вечер, у меня такой вопрос. В MainActivity можно обращаться к объектам, а если в другом классе требуется, допустим, найти объект...

Отображение активити поверх другого активити - Программирование Android
Ребят подскажите пожалуйста как такое сделать. Есть активити с картой, по нажатию кнопки настройки, нужно открыть активити с настройками,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.10.2012, 19:23 #2
у вас здесь два активити и вы пытаетесь найти внутри второго активити то, что находится внутри первого активити)
0
snakeas
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 4
21.10.2012, 05:31  [ТС] #3
Не могу вкурить, почему же я обращаюсь к первому активити?
У меня есть layout файл. Там есть визуальный компонент. Затем я с помощью метода SetContentView отображаю этот layout.
В каком месте я обращаюсь к активити? Проблему свою я понял, вопрос чисто теоретический, ибо никак не дойдет.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
21.10.2012, 06:37 #4
вы обращаетесь к активити стюдент в месте findViewById(R.id.tvHello); а контент у вас вставлен в активити MainActivity
1
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
22.10.2012, 11:37 #5
Не вижу смысла таким образом создавать объект, расширяющий активити . Активити гарантированно существует пока оно на экране, в другом случае система может посчитать его ненужным и грохнуть. При создании активити должен вызываться метод onCreate, в котором проходит вся инициализация, включая указание XML файла, который должен использоваться в активити. Этот метод сработает при получении активити соответствующего намерения (Intent). Например таким образом:
Java
1
startActivity(new Intent(this, Student.class));
В Вашем же случае инициализация активити не проводится, на экран активити не выводится и зачем подобное расширение класса Activity нужно мягко говоря не очень понятно, ведь все методы расширяемого класса вы оставляете "за бортом" и ниоткуда их не вызываете. И еще непонятно зачем в конце каждого метода писать return; по завершении метода мы и так из него выйдем. Опишите что конкретно Вы хотите получить на выходе, но перед этим прочитайте базовую теоретическую часть.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 11:37
Привет! Вот еще темы с ответами:

Изменение параметров активити из другого активити - Программирование Android
Как сделать так чтобы из первого активити поменять final ImageView img=(ImageView)findViewById(R.id.image1); ...

Как вызвать метод в активити классе из обычного не активити класса? - Программирование Android
Есть активити в котором вводятся логин и пароль. При нажатии кнопки "войти" в отдельном классе "сокетсервер"(+в отдельном потоке)...

Вызов новой активити не из класса активити - Программирование Android
Есть 4 класса: 1) WelcomeActivity; 2) MainActivity; 3) PopUpActivity; 4) Client. Программа работает с сервером и получает...

Обращение к фрагменту вне активити - Программирование Android
Здравствуйте, форумчане! Назрел такой вот вопрос: создан класс BannerFragment, унаследованный от фрагмента. В нём переопределён...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.10.2012, 11:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru