Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
1

Использование одного метода в двух активити

08.11.2016, 01:09. Показов 3099. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Подскажите такой вопрос: как можно использовать один метод для двух разных активити (android studio). Т.е. если я его опишу в паблик активити Main, как мне его подключить к активити second? Что-то перерыл весь интернет, а не могу найти ответ на этот вопрос.

Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2016, 01:09
Ответы с готовыми решениями:

Вызов и выполнение метода из одного активити в другом
У меня есть приложение, которое по жестам лица выполняет определенные действия. Я хочу при закрытии...

Использование переменной из одного метода в другой
Здравствуйте! Я начал писать программу для изучения методов. Я столкнулся с такой проблемой: в...

Использование метода из одного класса в другом
Здравствуйте! Проходим классы, все никак не могу понять, как использовать метод из одного класса в...

Использование метода одного класса в другом
Вопрос вот в чем. Как в классе useEmployee использовать метод описанный в классе Employee? При...

26
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
08.11.2016, 02:27 2
Сделать метод в отдельном классе и вызывать его хоть из 20 активити
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
08.11.2016, 09:03  [ТС] 3
пробовал, но не получается.

Я вызываю его из другого активити так: МайнАктивити.МайМетод(); но так не работает, пишет что не знает что такое МайнАктивити. Если просто МайМетод() - так же не знает.
0
Модератор
3389 / 2161 / 352
Регистрация: 13.01.2012
Сообщений: 8,380
08.11.2016, 10:17 4
charset, если метод не статический то вы не можете вызывать его через класс.метод()
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
08.11.2016, 10:39 5
Пишешь свой класс, там этот метод, потом в активити своих пишешь
Java
1
2
MyClass class=new MyClass(..); 
class.MyMethod(..);
Это написано в любой книжке по ооп, ещё можно статиком объявить, но это не очень.
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
08.11.2016, 15:32  [ТС] 6
vxg, да, метод не статический

Добавлено через 46 секунд
ExFau$t, сейчас попробую.

Добавлено через 3 минуты
видимо что-то не то делаю. Что-то не получается. Но буду сейчас рыть в данном направлении.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.11.2016, 15:35 7
Цитата Сообщение от charset Посмотреть сообщение
как можно использовать один метод для двух разных активити (android studio)
зачем и что на самом деле надо сделать?
Цитата Сообщение от charset Посмотреть сообщение
видимо что-то не то делаю
да, причем очень даже
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
08.11.2016, 15:42  [ТС] 8
я создал методы в классе:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    Button b_record;
    Button b_add_words;
    SharedPreferences sPref;
    final String SAVED_TEXT = "saved_text";
    
   .....
 
    public int SaveParam(String name, String value){
        sPref = getSharedPreferences(name, MODE_PRIVATE);
        SharedPreferences.Editor ed = sPref.edit();
        ed.putString(SAVED_TEXT, String.valueOf(value));
        ed.apply();
        return 1;
    }
}
Может уже на этом этапе я что-то не то сделал?

Далее мне нужно вызвать метод SaveParam(String name, String value) из другого активити. Я делаю так:
Java
1
MainActivity class=new MainActivity; // но тут Gradle уже ругается.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.11.2016, 15:56 9
Цитата Сообщение от charset Посмотреть сообщение
Далее мне нужно вызвать метод SaveParam(String name, String value) из другого активити.
зачем?
значит этот метод находится не на своем месте
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
08.11.2016, 15:58 10
Ты создал не класс, а AppCompatActivity. А да, ещё конструктор в классе должен быть.
0
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
08.11.2016, 16:06 11
Да дайте ему вот это почитать...
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
08.11.2016, 16:26  [ТС] 12
спасибо, буду читать.
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
10.11.2016, 13:28  [ТС] 13
в общем посмотрел статью, я так и делал. Разница в том что метод я сделал публичным, при этом он не был виден в экземпляре. Сделал его protected, теперь вижу (хотя по мне так как-то не логично), могу вызывать. Но теперь при вызове метода gridle выдает ошибку:

Error37, 59) error: <identifier> expected
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
10.11.2016, 13:31 14
код будет или гадать?
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
10.11.2016, 16:36  [ТС] 15
Все. Вопрос решился. Экземпляр класса создавал за пределами другого метода, по этой причине андроидстудио не ругалось на его использовании, ну а при компиляции выдавалась ошибка. Создал экземпляр непосредственно перед вызовом метода данного класса - все работает.

Моя ошибка была в том что метод в классе нужно было сделать protected, и область видимости экземпляра не распространялась на другой метод где я его вызывал.

Спасибо всем кто откликнулся.

Добавлено через 2 часа 59 минут
ах, да

это укороченный вариант
Java
1
2
3
4
5
6
7
8
9
class MainLib extends MainActivity{
    SharedPreferences sPref;
    final String SAVED_TEXT = "saved_text";
 
    protected String LoadParam_pub_fsf(String name){
        sPref = getSharedPreferences(name, MODE_PRIVATE);
        return sPref.getString(SAVED_TEXT, "");
    }
}
ну и вызов из другого активити
Java
1
2
3
4
public void onClick(View v) {
                MainLib main = new MainLib();
                Log.d(TAG, "ssss-main: "+main.LoadParam_pub_fsf("MainDir"));
            }
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
10.11.2016, 16:48 16
а просто перенести этот метод целиком во вторую активити и вызывать там, не?
без создания экземпляра активити
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
10.11.2016, 17:27  [ТС] 17
перенести? В смысле скопировать код?

Добавлено через 55 секунд
мне нужно использовать данный метод на нескольких активити

Добавлено через 31 минуту
теперь другая проблема. В общем я вернулся к тому с чего изначально и начинал. В методе у меня используется бибилиотека
Java
1
android.content.SharedPreferences;
подключить у меня только получается если в классе
Java
1
extends MainActivity
. Но при вызове из другого активити у меня активити закрывается (не могу найти ошибку по какой закрывается). Либо не закрывается, а вместо него открывается активити где прописан этот класс, т.е. главный активити. Если создать класс без
Java
1
extends MainActivity
- не могу подключить
Java
1
android.content.SharedPreferences;
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
10.11.2016, 19:39 18
ответ в сообщении №5,10 и 11
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 12
10.11.2016, 21:47  [ТС] 19
Но в таком случае у меня не получается использовать:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
import android.content.SharedPreferences;
 
....
 
class MainLib extends MainActivity{
    SharedPreferences sPref;
    final String SAVED_TEXT = "saved_text";
 
    protected String LoadParam_pub_fsf(String name){
        sPref = getSharedPreferences(name, MODE_PRIVATE);
        return sPref.getString(SAVED_TEXT, "");
    }
}
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
10.11.2016, 21:52 20
Уже 100500 раз посоветовали делать метод в отдельном классе, но ТС упорно сует его в активити. Видимо, дело принципа

Добавлено через 1 минуту
Цитата Сообщение от charset Посмотреть сообщение
extends MainActivity
Вот это вот зачем?

Добавлено через 2 минуты
И где конструктор класса? Там можно было бы контекст передать, если религия позволяет. А из контекста и в SharedPreferences пробраться...
0
10.11.2016, 21:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2016, 21:52
Помогаю со студенческими работами здесь

Использование одного метода для нескольких кнопок
Здравствуйте, у меня в программе есть много кнопок и следующий метод: public int Get_num() ...

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

EF использование одного ApplicationDbContext в двух проектах
Доброго времени суток коллеги. Есть ASP Core проект использующий EF для доступа к БД. Стала...

Использование двух источников для одного label
Имеется база данных с таблицами &quot;Заказы&quot; (Заказчик, Товар, Количество) и &quot;Товары&quot; (Наименование,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru