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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.74
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

Как запустить метод из другого класса? - Программирование Android

24.06.2013, 21:22. Просмотров 6569. Ответов 21
Метки нет (Все метки)

есть класс:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Class1 extends DialogFragment implements OnClickListener {
 
    TextView textViewMessage;
 
    String name;
    String nameEvent;
 
    Class2 class2;
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
 
        class2 = new Class2();
 
        View v = inflater.inflate(R.layout.class, null);
        v.findViewById(R.id.button1).setOnClickListener(this);
        v.findViewById(R.id.button2).setOnClickListener(this);
 
        return v;
    }
 
    public void onClick(View v) {
 
        switch (v.getId()) {
        case R.id.button1:
            dismiss();
            break;
        case R.id.button2:
 
            class2.stActivity();
 
            break;
        }
 
    }
 
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);
    }
 
    public void onCancel(DialogInterface dialog) {
        super.onCancel(dialog);
    }
 
}
из него я так: class2.startLoginActivity(); вызываю метод из другого класса. Вот класс который содержит вызывающий метод:

Java
1
2
3
4
5
6
7
8
9
10
public class Class2 extends Activity {
 
    private static final int REQUEST_LOGIN = 1;
 
                public void stActivity() {
        Intent intent = new Intent();
        intent.setClass(this, myActivity.class);
        startActivityForResult(intent, REQUEST_LOGIN);
    }
}
Но выскакивает nullPointExeption. Я так понимаю проблемы с контекстом, помогите примером или поправьте выложенный код, уже не знаю как правильно здесь всё сделать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 21:22     Как запустить метод из другого класса?
Посмотрите здесь:
Android Как изменить Textview из другого класса (класса адаптера RecyclerView)
Android Подскажите как запустить через Inten Activity другого приложения
Android Как выполнить setContentView из другого класса?
Как запустить метод из Service? Android
Android Как передать данные в Activity из другого класса
Как запустить метод в заданное время Android
Android Как запустить метод Fragment из MainActivity?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.06.2013, 23:57     Как запустить метод из другого класса? #16
Java
1
2
3
4
5
6
7
8
9
10
public class Class2 {
 
    private static final int REQUEST_LOGIN = 1;
 
       public static void stActivity(Activity activity) {
        Intent intent = new Intent();
        intent.setClass(this, myActivity.class);
        activity.startActivityForResult(intent, REQUEST_LOGIN);
    }
}
Java
1
Class2 .stActivity(getActivity());
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.06.2013, 00:15  [ТС]     Как запустить метод из другого класса? #17
подчёркивает this в 3 строчке метода и пишет:
Java
1
Cannot use this in a static context
Добавлено через 5 минут
Наверное нужно использовать вместо this - activity.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.06.2013, 00:17     Как запустить метод из другого класса? #18
Цитата Сообщение от Stylish2013 Посмотреть сообщение
Наверное нужно использовать вместо this - activity.
ага, копипаст.
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.06.2013, 00:44  [ТС]     Как запустить метод из другого класса? #19
@V0v1k, Код который вы предоставили работает, вы гений!!!

Но у меня возникла загвоздка далее:

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
public static void method(final Activity activity) {
 
                   ...
        new Thread() {
            @Override
            public void run() {
                try {
                    System.out.println("Test");
                    // Показать сообщение в UI потоке
                    activity.runOnUiThread(sucRunnable);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
 
 
    static Runnable sucRunnable = new Runnable() {
        @Override
        public void run() {
            Toast.makeText(activity, "Runnable",
                    Toast.LENGTH_LONG).show();
        }
    };
в строчке Toast.makeText(activity, "Runnable", Toast.LENGTH_LONG).show(); подчеркивает activity. Было this, но уже поменял на activity и не помогает. Пишет activity cannot be resolved to a variable.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.06.2013, 00:57     Как запустить метод из другого класса? #20
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
private static Runnable sucRunnable;
public static void method(final Activity activity) {
 if(sucRunnable == null){
        sucRunnable  = new Runnable() {
        @Override
        public void run() {
            Toast.makeText(activity, "Runnable",
                    Toast.LENGTH_LONG).show();
        }
    };
}
                   ...
        new Thread() {
            @Override
            public void run() {
                try {
                    System.out.println("Test");
                    // Показать сообщение в UI потоке
                    activity.runOnUiThread(sucRunnable);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.06.2013, 01:13  [ТС]     Как запустить метод из другого класса? #21
вот оказывается как надо... Спасибо огромное, работает!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 17:06     Как запустить метод из другого класса?
Еще ссылки по теме:
Как запустить метод в Activity из BroadcastReceiver Android
Android Как запустить метод в сервисе, в определённое время?
Запустить runOnUiThread из класса Android
Android Получение данных из другого класса
Android Обращение к методу другого класса

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

Или воспользуйтесь поиском по форуму:
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
31.07.2013, 17:06     Как запустить метод из другого класса? #22
У меня подобная проблема возникла.
Я написал свой адаптер для списка ListView. В адаптере у меня обработчик onTouch на каждый пункт списка. Мне нужно вызвать стандартный андроидовский интент (звонок). Как его вызывать?
Запустить мне его нужно в методе analizeSwype.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        
        View view = convertView;
        
        if (view == null) {
              view = lInflater.inflate(R.layout.item, parent, false);
            }
        
        final Contact p = getContact(position);
            
        ((TextView) view.findViewById(R.id.name_tv)).setText(p.name);
        ((TextView) view.findViewById(R.id.num_tv)).setText(p.tel);
        
        
        OnTouchListener listener = new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                number = p.tel;
                switch (event.getAction())
                {
                case MotionEvent.ACTION_DOWN:
                    fromPosition = event.getX();
                    break;
                case MotionEvent.ACTION_UP: 
                    
                    float toPosition = event.getX();
                    analizeSwipe(fromPosition, toPosition);
                    
                }
                return true;
            }
        };
        
        view.setOnTouchListener(listener);
        
        
        return view;
    }
    
    Contact getContact(int position) {
        return ((Contact) getItem(position));
      }
    
    public String getLastNumber(){
        return number;
    }
    
    
    public void analizeSwipe(float from, float to){
        
        
        float device_x = DispMetrics.widthPixels;
        
        float minSwype = (device_x / 100) * 30;
        
        if (from > to && (from-to) > minSwype){
            
            Log.i("log_tag","Номер = " + number);
            
        }
    }
Добавлено через 15 минут
Всмысле, я знаю как вызвать сам интент, но не понимаю, как его вызвать в моем случае.

На активности я его вызывал так:

Java
1
2
3
Intent callIntent = new Intent(Intent.ACTION_CALL); 
             callIntent.setData(Uri.parse("tel:" + Num)); 
             startActivity(callIntent);
Как вызвать в адаптере - не знаю.

Добавлено через 1 час 31 минуту
Все, решил проблему. Вызвал с помощью контекста ctx.
Yandex
Объявления
31.07.2013, 17:06     Как запустить метод из другого класса?
Ответ Создать тему
Опции темы

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