Страница 1 из 1
Как обратиться к Activity из вновь созданного класа?
Добавлено: 16 сен 2014, 12:00
grem17
создаю новый класс без наследования, хочу в нем сделать вывод сообщения на экран
создаю процедуру
Код: Выделить всё
protected void Mess (Context c){
Toast.makeText(c, "text", Toast.LENGTH_SHORT).show();
}
в основном модуле вешаю обработчик события на кнопку и хочу вызвать процедуру из нового класса, передав туда параметром Activity
Код: Выделить всё
Button btn_add = (Button) findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Message.Mess(getApplicationContext());
}
как обратиться к основному Activity из вновь созданного класса?
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 16 сен 2014, 15:00
anber
1) protected void Mess (Context c) - Mess это название метода и должно начинаться с маленькой буквы
2) раз нужно обратиться к Activity так и передавай Activity а не Context.
3) ЗАЧЕМ понадобилось обращаться к Activity в постороннем классе??? Что-то мне подсказывает что вы задумали что-то плохое.
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 16 сен 2014, 17:02
grem17
то что вам подсказывает - явно ошибается
у меня знаний не хватит на что то плохое и желания это делать нет
все проще, хочу научиться создавать классы и вызывать функции из них
для себя решил разобраться и создать класс с единственной процедурой выполняющей вывод сообщения на экран, как это сделать?
класс создал, функцию создал, если бы выводил сообщение из основного класса MainActivity то было бы так
Toast.makeText(this, "text", Toast.LENGTH_SHORT).show();
а как вывести сообщение на экран из нового класса?
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 16 сен 2014, 17:47
anber
Под что-то плохое я имел в виду что передача Activity в другой класс чревата багами, проблемой с архитектурой и прочей головной болью разработчика.
>>>все проще, хочу научиться создавать классы и вызывать функции из них
Зачем тогда лезть в андроид? Изучай чистую джаву, будет меньше проблем, потом перейдешь к андроиду.
>>>создать класс с единственной процедурой выполняющей вывод сообщения на экран, как это сделать?
сам же писал
>>>Toast.makeText(c, "text", Toast.LENGTH_SHORT).show();
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 17 сен 2014, 09:56
grem17
возможно я непонятно объяснил чего хочу, попробую иначе...
создал новый проект, в основном классе добавил единственную строку - вывод сообщени на экран
Код: Выделить всё
package com.example.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(getApplication(), "test", Toast.LENGTH_SHORT).show();}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
теперь хочу создать новый класс, с процедурой и вызывать это же сообщение уже через него...
основной модуль переделываю, он становится вот таким
Код: Выделить всё
package com.example.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
private NewClass NewClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NewClass.NewFunction();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
новый класс к которому идет обращение
Код: Выделить всё
package com.example.test;
import android.widget.Toast;
public class NewClass{
public void NewFunction() {
Toast.makeText(null, "test", Toast.LENGTH_SHORT).show();
}
}
инетерсует вот эта строка
Toast.makeText(
null, "test", Toast.LENGTH_SHORT).show();
что должно быть вместо null?
возможно при вызове функции надо ссылку на Activity или Context передавать как параметр?
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 17 сен 2014, 10:33
anber
создаю процедуру
protected void Mess (Context c){
Toast.makeText(c, "text", Toast.LENGTH_SHORT).show();
}
Ты писал это в первом сообщении - ты передаешь Context как параметр. Вызываешь его Message.Mess(getApplicationContext()); Тут точно также.
>>>что должно быть вместо null?
Если брать пример выше то c.
Вместо NewClass.NewFunction(); - NewClass.NewFunction(getApplicationContext());
Только пиши названия функций с маленькой буквы. Не NewClass.NewFunction(); а NewClass.newFunction();
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 17 сен 2014, 11:18
grem17
блин, но не работает же...
Код: Выделить всё
package com.example.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
private NewClass NewClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NewClass.newFunction(getApplicationContext());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Код: Выделить всё
package com.example.test;
import android.content.Context;
import android.widget.Toast;
public class NewClass {
public void newFunction(Context c) {
Toast.makeText(c, "test", Toast.LENGTH_SHORT).show();
}
}
выдает ошибку

- ScreenShot 6.jpg (144.79 КБ) 12346 просмотров
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 17 сен 2014, 12:58
anber
У меня работает.
В LogCat что?
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 05:16
grem17

- ScreenShot 7.jpg (568.27 КБ) 12337 просмотров

- ScreenShot 8.jpg (396.68 КБ) 12337 просмотров
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 07:40
klblk
1) Оформляйте код на форуме читабельно!
2) [syntax=java]private NewClass NewClass;[/syntax]
Имена переменных также как и имена функций должны быть с маленькой буквы.
3) [syntax=java]NewClass.newFunction(getApplicationContext());[/syntax]
NPE
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 08:00
grem17
отредактировал код по правилам
так как насчет моего вопроса?
если бы я делал это через delphi то обращение к элементам формы из любого модуля выглядело бы так Form1.Label1.Text:="бла-бла-бла";
в java активность аналогична форме в делфи, но здесь свой синтаксис, нельзя сказать
Activity1.Toast.makeText(.......).show();
вопрос - а как можно?
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 09:05
grem17
все, сам разобрался =)
код основного модуля
Код: Выделить всё
package com.example.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
код доп. модуля
Код: Выделить всё
package com.example.test;
import android.content.Context;
import android.widget.Toast;
public class NewClass {
public void newFunction(Context c) {
Toast.makeText(c, "test", Toast.LENGTH_SHORT).show();
}
}
вся проблема была в неправильном объявлении и вызове доп.класса, должно быть вот так
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());
всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 10:02
klblk
grem17 писал(а):вся проблема была в неправильном объявлении и вызове доп.класса, должно быть вот так
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());
всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча
ну я же написал
NPE =)
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 10:35
anber
klblk писал(а):
ну я же написал
NPE =)
BTW, AFAIK NPE LGTM, BRB
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 15:46
KamiSempai
grem17 писал(а):вся проблема была в неправильном объявлении и вызове доп.класса, должно быть вот так
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());
всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча

Это не форум, а кладезь нелепых ошибок. Кто же так переменные называет?
PS:Мой список каверзных вопросов по Java пополнился еще одним

Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 15:56
Mikhail_dev
надо сделать FAQ, куда добавить "Java Code Convention" как библию
Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 16:13
anber
Mikhail_dev писал(а):надо сделать FAQ, куда добавить "Java Code Convention" как библию
FAQ все равно никто не читает. Особенно те кто эту самую Code Convention не соблюдает.
PS:Мой список каверзных вопросов по Java пополнился еще одним
У меня вчера спросили, почему не компилится:
String s = "test\u005C";
System.out.println(s);
для разнообразия можно в Intellij Idea вбить String s = "test\u005C\"; и посмотреть на ее реакцию

Re: Как обратиться к Activity из вновь созданного класа?
Добавлено: 18 сен 2014, 16:21
Mikhail_dev
У меня вчера спросили, почему не компилится:
String s = "test\u005C";
System.out.println(s);
ну экранирование еще ладно, не все его понимают.