Как обратиться к Activity из вновь созданного класа?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 16 сен 2014, 12:00

создаю новый класс без наследования, хочу в нем сделать вывод сообщения на экран

создаю процедуру

Код: Выделить всё

	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 из вновь созданного класса?
Последний раз редактировалось grem17 18 сен 2014, 07:56, всего редактировалось 1 раз.

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 16 сен 2014, 15:00

1) protected void Mess (Context c) - Mess это название метода и должно начинаться с маленькой буквы
2) раз нужно обратиться к Activity так и передавай Activity а не Context.
3) ЗАЧЕМ понадобилось обращаться к Activity в постороннем классе??? Что-то мне подсказывает что вы задумали что-то плохое.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 16 сен 2014, 17:02

то что вам подсказывает - явно ошибается
у меня знаний не хватит на что то плохое и желания это делать нет

все проще, хочу научиться создавать классы и вызывать функции из них
для себя решил разобраться и создать класс с единственной процедурой выполняющей вывод сообщения на экран, как это сделать?
класс создал, функцию создал, если бы выводил сообщение из основного класса MainActivity то было бы так

Toast.makeText(this, "text", Toast.LENGTH_SHORT).show();

а как вывести сообщение на экран из нового класса?

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 16 сен 2014, 17:47

Под что-то плохое я имел в виду что передача Activity в другой класс чревата багами, проблемой с архитектурой и прочей головной болью разработчика.

>>>все проще, хочу научиться создавать классы и вызывать функции из них
Зачем тогда лезть в андроид? Изучай чистую джаву, будет меньше проблем, потом перейдешь к андроиду.

>>>создать класс с единственной процедурой выполняющей вывод сообщения на экран, как это сделать?
сам же писал
>>>Toast.makeText(c, "text", Toast.LENGTH_SHORT).show();
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 17 сен 2014, 09:56

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

Код: Выделить всё

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 передавать как параметр?
Последний раз редактировалось grem17 18 сен 2014, 07:59, всего редактировалось 2 раза.

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 17 сен 2014, 10:33

создаю процедуру

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();
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 17 сен 2014, 11:18

блин, но не работает же...

Код: Выделить всё

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
ScreenShot 6.jpg (144.79 КБ) 8031 просмотр
Последний раз редактировалось grem17 18 сен 2014, 08:00, всего редактировалось 1 раз.

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 17 сен 2014, 12:58

У меня работает.
В LogCat что?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 18 сен 2014, 05:16

ScreenShot 7.jpg
ScreenShot 7.jpg (568.27 КБ) 8022 просмотра
ScreenShot 8.jpg
ScreenShot 8.jpg (396.68 КБ) 8022 просмотра

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение klblk » 18 сен 2014, 07:40

1) Оформляйте код на форуме читабельно!
2) [syntax=java]private NewClass NewClass;[/syntax]
Имена переменных также как и имена функций должны быть с маленькой буквы.
3) [syntax=java]NewClass.newFunction(getApplicationContext());[/syntax]
NPE

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 18 сен 2014, 08:00

отредактировал код по правилам
так как насчет моего вопроса?

если бы я делал это через delphi то обращение к элементам формы из любого модуля выглядело бы так Form1.Label1.Text:="бла-бла-бла";

в java активность аналогична форме в делфи, но здесь свой синтаксис, нельзя сказать
Activity1.Toast.makeText(.......).show();

вопрос - а как можно?

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение grem17 » 18 сен 2014, 09:05

все, сам разобрался =)

код основного модуля

Код: Выделить всё

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());


всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение klblk » 18 сен 2014, 10:02

grem17 писал(а):вся проблема была в неправильном объявлении и вызове доп.класса, должно быть вот так
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());


всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча
ну я же написал NPE =)

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 18 сен 2014, 10:35

klblk писал(а): ну я же написал NPE =)
BTW, AFAIK NPE LGTM, BRB
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение KamiSempai » 18 сен 2014, 15:46

grem17 писал(а):вся проблема была в неправильном объявлении и вызове доп.класса, должно быть вот так
NewClass NewClass = new NewClass();
NewClass.newFunction(getApplication());


всем спасибо, форум понравился - живой, я у вас тут поселюсь надолго, вопросов куча
:shock: Это не форум, а кладезь нелепых ошибок. Кто же так переменные называет?

PS:Мой список каверзных вопросов по Java пополнился еще одним :twisted:
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение Mikhail_dev » 18 сен 2014, 15:56

надо сделать FAQ, куда добавить "Java Code Convention" как библию

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение anber » 18 сен 2014, 16:13

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\"; и посмотреть на ее реакцию :)
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Как обратиться к Activity из вновь созданного класа?

Сообщение Mikhail_dev » 18 сен 2014, 16:21

У меня вчера спросили, почему не компилится:
String s = "test\u005C";
System.out.println(s);
ну экранирование еще ладно, не все его понимают.

Ответить