как вызывать выполнение функций из собственного класса

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: как вызывать выполнение функций из собственного класса

Сообщение altwin » 17 апр 2014, 17:00

Foenix писал(а):ну неизменная тут только 1 часть - вы, мужчины. Все стараетесь женщину переделать - хотя бы мнение ей исправить. А исправлять-то что? женщина - создание целостное. Ты в ней что-то исправь по-своему, она перестанет быть женщиной, а станет creature неизвестной породы.
Даже говорить больше не хочу. Напал понимаешь.
Зачем же исправлять? Мы вас итак любим :) Просто изучаем реакцию на различные раздражители с целью разработки методов контроля и воздействия :)
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:18

БРАВО! На какой диалог я сподвиг вас! :lol:

Читал с удовольствием.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:20

особенно понравилось это
Foenix писал(а):женщина сама решает когда ей изменять и мнение в том числе. Вернее, даже не решает - а просто она чувствует это и делает. Это вы называете "женской логикой". Очень удобное для нас оправдание. Я если что на это ссылаюсь. Да и не нужно ссылаться - все и так понимают.
altwin писал(а): Зачем же исправлять? Мы вас итак любим :) Просто изучаем реакцию на различные раздражители с целью разработки методов контроля и воздействия :)

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:23

Хорошо, девушка, красавица, умница, ну представьте тогда, что я программист в стиле садо-мазо :lol:

ну вот хочется мне руль от управления самолетом вынести за пределы самолета и дать его женщине поиграться :lol:

ну просто хочется увидеть как пример как это может быть реализовано, ну что вам сложно показать? :D

я имею в виду как вынести клик по Info в отдельный класс

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:24

altwin писал(а):
n0tb0dy писал(а):на сколько я пока нагуглил, многие пишут, что такой возможности в API нет, ну или про нее ни кто не знает :)
http://developer.android.com/intl/ru/re ... yInfo.html

or maybe this topic:
http://stackoverflow.com/a/9736905/2611075

плохо гуглил каюсь :roll:

спасибо за примерчик попробую поиграться с ним

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 17:25

Расслабься и получай удовольствие от изучения чего-нибудь другого, мы не подопытные крыски, чтоб ожидать одинаковую реакцию от нас на одно и то же событие :-D
Изучать надо не "женщин вообще", т.к. у тебя мозг взорвется, а конкретно свою подругу и не с целью "понять реакцию на различные раздражители", а с истинно мужской целью - уберечь нас от опасностей окружающего мира и нас самих. Кому-то не давать руль крутить, кому-то цифры на калькуляторе складывать при заполнии налоговой декларации, а кому-то что-то еще. И делать это так ненавязчиво, чтоб женщины прям влюблялись сразу.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 17:27

n0tb0dy писал(а):БРАВО! На какой диалог я сподвиг вас! :lol:

Читал с удовольствием.
Искреннее спасибо за понимание - нам тоже иной раз хочется отдохнуть и расслабиться, но редко кто в ветках из задающих вопросы к этому относится с таким настроением.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 17:28

n0tb0dy писал(а):особенно понравилось это
Foenix писал(а):женщина сама решает когда ей изменять и мнение в том числе. Вернее, даже не решает - а просто она чувствует это и делает. Это вы называете "женской логикой". Очень удобное для нас оправдание. Я если что на это ссылаюсь. Да и не нужно ссылаться - все и так понимают.
altwin писал(а): Зачем же исправлять? Мы вас итак любим :) Просто изучаем реакцию на различные раздражители с целью разработки методов контроля и воздействия :)
боюсь, что все еще не апофеоз сегодняшнего выступления altwin :-D
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:31

Я ТРЕБУЮ ПРОДОЛЖЕНИЯ БАНКЕТА!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 17:32

n0tb0dy писал(а):Хорошо, девушка, красавица, умница, ну представьте тогда, что я программист в стиле садо-мазо :lol:

ну вот хочется мне руль от управления самолетом вынести за пределы самолета и дать его женщине поиграться :lol:

ну просто хочется увидеть как пример как это может быть реализовано, ну что вам сложно показать? :D

я имею в виду как вынести клик по Info в отдельный класс
Ты пойми, я тут на форуме роль играю вполне определенную - помогать тем, кто меньше меня знает) и наставлять на путь истинный )) а это не есть истинный путь. Возможно завтра у меня будет другое настроение... но поверь мне - это не пойдет тебе на пользу, брось ты это и изучай то, как ПОЛОЖЕНО это делать. Садомазо потом будешь изображать))
Или хотя бы ответь на вопрос - что у тебя там за активити. Чета не хочешь ты отвечать, значит ...............
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:38

Вот файлик с проектом в прицепе.
AP0003.rar
(1.4 МБ) 154 скачивания
Там есть четыре активности A B C D

в каждой кнопка Info

так вот хочу обработчик кнопки Info запихнуть в отельный класс и вызывать его, чтобы код активности был меньше

[syntax=java]
package com.example.ap0003;

import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class ActivityA extends Activity {

final String TAG = "States";
TextView tvTextLife, MyTextA, vTextA;
List<ActivityManager.RunningTaskInfo> list;
ActivityManager am;
Integer TotalActCount;
Boolean FirstStart;
Boolean NextAct;
static final String SaveTextEditA = "TEXTEDIT_A_STATE";
SharedPreferences sPref;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // супер класс всегда вызывайте
// первым
setContentView(R.layout.layout_a);
// записали название приложения, активности и TaskID в заголовок приложения
setTitle(getResources().getString(R.string.app_name) + " | "
+ getLocalClassName() + " | TaskID: " + getTaskId());

// флаг что активность запущена впервые
FirstStart = true;
// кнопка запуска следующей Активности не нажималась
NextAct = false;
if (savedInstanceState != null) {
// Restore value of members from saved state
// находим текстовое поле по его идентификатору
vTextA = (TextView) findViewById(R.id.textViewA);
// и присваиваем ему сохраненное в методе onSaveInstanceState
// значение
vTextA.setText(savedInstanceState.getString(SaveTextEditA));
Log.d(TAG, "ActivityA: onCreate() NOT NULL: "
+ vTextA.getText().toString());
} else {
// Probably initialize members with default values for a new
// instance
Log.d(TAG, "ActivityA: onCreate() NULL");
}

Log.d(TAG, "ActivityA: onCreate()");

}

@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "ActivityA: onStart()");
}

@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "ActivityA: onResume()");
// получаем список 10 последних задач
am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
list = am.getRunningTasks(10);
// перебираем список задач и выбираем свою по TaskID
for (RunningTaskInfo task : list) {
if (task.id==getTaskId()) {
// находим поле для вывода информации о количестве запущенных
// Активностей
tvTextLife = (TextView) findViewById(R.id.textActCountA);
TotalActCount = task.numActivities;
// коррекция счетчика для кнопки ОБРАТНО
if (NextAct == true & FirstStart == false)
TotalActCount = TotalActCount - 1;
// выводим количество Активностей в задаче
tvTextLife.setText("Activites in task " + TotalActCount);
// коррекция счетчика для кнопки ДОМОЙ
NextAct = false;
}
}
}

@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "ActivityA: onPause()");
// флаг что активность уже была запущена
FirstStart = false;
// находим текстовое поле по его идентификатору
tvTextLife = (TextView) findViewById(R.id.textStateActA);
// присваиваем значение атрибуту Text для выбранного TextView
tvTextLife.setText("Этот экземпляр ActivityA уже был запущен!");

}

@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "ActivityA: onStop()");
}

@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "ActivityA: onRestart()");
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "ActivityA: onDestroy()");
}

public void onClickStartB(View v) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
// кнопка запуска следующей Активности была нажата
NextAct = true;

}

public void onInfoClick(View v) {
final String TAG = "States";
// получаем список 10 последних задач

list = am.getRunningTasks(10);
// перебираем список задач и выбираем свои по имени пакетов
// com.example.ap000
for (RunningTaskInfo task : list) {
if (task.baseActivity.flattenToShortString().startsWith(
"com.example.ap000")) {
// находим поле для вывода информации о количестве запущенных
// Активностей

Log.d(TAG, "------------------");
Log.d(TAG, "TaskID: " + task.id);
Log.d(TAG, "Num: " + task.numActivities);
Log.d(TAG, "Base: " + task.baseActivity.flattenToShortString());
Log.d(TAG, "Top: " + task.topActivity.flattenToShortString());
Log.d(TAG, "Thread ID: "+ android.os.Process.myTid());
Log.d(TAG, "Process ID: "+ android.os.Process.myPid());
Log.d(TAG, "------------------");

}
}

}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
// получаем ссылку на поле ввода текста
MyTextA = (EditText) findViewById(R.id.editTextA);
// сохраняем состояние поля ввода текста
savedInstanceState.putString(SaveTextEditA, MyTextA.getText()
.toString());
Log.d(TAG, "onSaveInstanceState A text: "
+ MyTextA.getText().toString());
// всегда вызывайте супер класс чтобы сохранить
// состояние всех view активности
super.onSaveInstanceState(savedInstanceState);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// находим текстовое поле по его идентификатору
vTextA = (TextView) findViewById(R.id.textViewA);
// и присваиваем ему сохраненное в методе onSaveInstanceState значение
vTextA.setText(savedInstanceState.getString(SaveTextEditA));
Log.d(TAG, "onRestoreInstanceState A: " + vTextA.getText().toString());
}

}


[/syntax]

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: как вызывать выполнение функций из собственного класса

Сообщение altwin » 17 апр 2014, 17:39

Foenix писал(а):Возможно завтра у меня будет другое настроение... .
И в этом вся суть :)
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:41

речь идет об onInfoClick

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: как вызывать выполнение функций из собственного класса

Сообщение altwin » 17 апр 2014, 17:49

я в общем то качать не буду.. да и всеравно открывать .rar у меня компутеры не умеют, но. Функцию можно вынести в любой класс. Доступ к кнопке, как и любому другому ресурсу приложения можно получить:
а). import android.R
б). импортировать напрямую класс Activity либо сделать getter для нужного свойства и стучатся через него, но...
в). гораздо проще в класс активити импортировать класс содержащий функцию
б и в вполне подходят для import static конструкции, но во первых для этого существует setOnItemClickListener() о котором я писал в одном из первых сообщений ;) т.е. назначить его можно не только кнопке но и любому элементу и передать туда любой метод, который будет вызываться при срабатывании.
т.е. что то вроде:
[syntax=java5]
import static com.example.ap0003.ActivityA.onInfoClick;

buttonOrSomethingElse.setOnItemClickListener(onInfoClick);
[/syntax]
Я конечно не пробывал, но работать должно :) А вообще способ проделать такой финт ушами можно придумать много... вопрос зачем - остается :)
Последний раз редактировалось altwin 17 апр 2014, 17:54, всего редактировалось 2 раза.
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 17:52

попытаюсь переварить то что вы сказали :) на сколько хватит моего текущего понимания

в любом случае премного благодарен за ваше участие

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: как вызывать выполнение функций из собственного класса

Сообщение altwin » 17 апр 2014, 17:56

n0tb0dy писал(а):попытаюсь переварить то что вы сказали :) на сколько хватит моего текущего понимания

в любом случае премного благодарен за ваше участие
А если вспомнить. что это всетаки java, то разумней было бы так:
[syntax=java5]
class superTop implements View.OnClickListener {

@Override
public void onClick(View v) {
Log.e("", "onClick superTop");
}

}

class NewClick extends superTop implements View.OnClickListener {

@Override
public void onClick(View v) {
Log.e("", "onClick NewClick");

super.onClick(v);

}

}

findViewById(R.id.button1).setOnClickListener(new NewClick());
[/syntax]
т.е. отнаследоваться от стандартного обработчика и переопределить конструктор выполняя что угодно :)

Или переопредлеить кнопку:
[syntax=java5]
Class Yourbutton extends Button implements Button.OnClickListener{
public Yourbutton(Context c) {
super(c);
}
public Yourbutton(Context c,AttributeSet s){
super(c,s);
}
public void onClick(View v){
//do your stuff;
}
}
[/syntax]
и "вшить " в нее onСlick...

а вот еще забыл...:
[syntax=java5]
View.OnClickListener yourClickListener = new View.OnClickListener() {
public void onClick(View v) {
//play the music
}
};

button1.setOnClickListener(yourClickListener);
button2.setOnClickListener(yourClickListener);
button3.setOnClickListener(yourClickListener);
[/syntax]
Последний раз редактировалось altwin 17 апр 2014, 18:00, всего редактировалось 2 раза.
Изображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 17:57

а что скрывается под этим
// находим поле для вывода информации о количестве запущенных
// Активностей

Понимаешь, если данный метод не будет включать в себя изменение на экране в активности чего-нибудь, а будет просто возвращать после обработки некие данные в активность, которую ОНА УЖЕ САМА будет решать что с ними делать - показывать на экране или еще что-то, то да, так и НУЖНО сделать. Организовать отдельный класс с каким-то жизненным циклом и ему уже приделывать как руки и ноги некие методы. Пример такого класса - это класс DatabaseHelper в уроках, и много-много других. Просто сделай по аналогии. Вызов методов будет по порядку - вначале создаем экземпляр класса, затем его методы юзаем.

Однако, если класс очень простой, у него нету никакого жизненного цикла, то да, можно туда напихать и статических методов, вызывать их где заблагорассудится. Я такое проделываю с очень незначительными, впомогательными штуками типа форматирования строк. Выношу обработку строчек в отдельный класс, все методы объявляю статическими (т.е. они получаются сгруппированными лишь по смыслу) и вызываю просто для того, чтоб получить из одной строки на входе в другую.
Только у статических методов есть свои особенности в том числе по работе с памятью, поэтому лучше вначале про них почитать.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 18:01

Насчет листенеров. Уточню!!
Не делайте так - не нужно выносить именно его никуда. Нужно в нем описать вызов метода нового созданного класса!! т.е. будет выглядеть так

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

public void onInfoClick(View v) {
int (допустим) вход =0;
                какой_то_класс.какой_то_метод(вход, выход);
а дальше юзаем выход как хотим - отображаем, удаляем, взрываем..
                }

 

        }
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: как вызывать выполнение функций из собственного класса

Сообщение n0tb0dy » 17 апр 2014, 18:02

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

на этом приложении я просто изучаю жизененные циклы активностей во всех их вариантах и способах запуска, а также Task and Back Stack

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: как вызывать выполнение функций из собственного класса

Сообщение Foenix » 17 апр 2014, 18:04

вывод результата метода в текстовые поля необходимо делать в классе активности, в методе onInfoClick()
в чужом методе, как в черном ящике - не должны изменяться поля другого класса (а именно класса активности!)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить