Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
#1

Вызов нестатического метода из другого класса - Программирование Android

22.05.2015, 20:44. Просмотров 1858. Ответов 14
Метки нет (Все метки)

Здравствуйте. Подскажите, как можно вызвать нестатистический метод из другого класса.
1.Этот другой класс нельзя наследовать тем классом, он уже унаследован от другого.
2.Манипуляции с контекстом не хочу использовать.
3.Через экземпляр класса вылетает ошибка.

Какие есть варианты?

Добавлено через 8 минут
И я заметил, что статистические методы, не очень любят использовать. Почему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2015, 20:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вызов нестатического метода из другого класса (Программирование Android):

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

Вызов метода из другого Activity
Здраствуйте. Помогите,пожалуйста, разобраться с несколькими вопросами: 1)...

Вызов метода из класса в таймере
Не могу получить титул веб страницы в таймере (ошибка). Пример: public...

Вызов Context из другого класса
Как вызвать Context из класса Output public class MapsActivity extends...

Null при вызове метода из другого класса
Суть такая. Я создал приложение с двумя активити NavigationView (через...

Корректное выделение метода в отдельный сервис и обращение к нему из другого класса
Всем привет. Я извиняюсь, вопрос покажется новичковым, но все таки еще путаюсь...

14
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
22.05.2015, 20:48 #2
Цитата Сообщение от semiromid Посмотреть сообщение
Этот другой класс нельзя наследовать тем классом, он уже унаследован от другого.
Виталик Кличко? Ты что ли?

Нестатический метод можно вызвать на экземпляре класса.
3
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 00:44  [ТС] #3
Паблито, Так не получается так, и никогда не получалось. Вылетает ошибка, всегда.


Нужно вызвать метод Wind() из метода Met()

класс 1
Java
1
2
3
4
5
6
7
public class MyAd1 extends Activity {
 
public void Met(){
//работаем
}
 
}
класс 2
Java
1
2
3
4
5
6
7
8
public class MyAd2 extends Activity {
 
public void Wind(){
//работаем
// тут инструкция связанная с контекстом и нестатическими переменными и другими методами этого класса, которые тоже не статистические
}
 
}
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
23.05.2015, 09:53 #4
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
    public static void main(String[] args) {
 
        A a = new A();
        B b = new B();
        a.b = b;
        b.a = a;
        a.method1();
        b.method2();
 
    }
 
class A {
    B b;
    void method1() {
        b.method2();
    }
}
 
class B {
    A a;
    void method2() {
        a.method1();
    }
}
вполне себе рабочий код, а то, что ты пытаешься из одной активити вызвать что-то в другой - это вопрос вообще из другой плоскости
0
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 11:03  [ТС] #5
Да я так и пытался вызывать, никогда не вызывалось, никогда! Там похоже ссылка меняется на этот метод в классе. Вы хоть раз пробовали таким способом вызывать методы?
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
23.05.2015, 11:17 #6
"Там похоже ссылка меняется на этот метод в классе." - вот тут вообще непонятно.
Я думаю нужно взять любую книгу по java(например "Java 7- The Complete Reference") и прочитать хотя бы первые 300страниц. Всё станет намного понятнее.
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
23.05.2015, 11:38 #7
я написал что код рабочий, значит сам его и проверил
0
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 21:02  [ТС] #8
Вот все данные
MainActivity
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
65
66
67
68
69
70
public class MainActivity extends Activity {
 
    private Adapter addap;
    private ArrayList<Integer> ImagV;
    private ArrayList<String> str;
    private ListView listView1;
    LayoutInflater lInflater;
    private int e000;
    Context con;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i("333"," Проверка 10000000");
        
        listView1 = (ListView) findViewById(R.id.listView1);
        ImagV = new ArrayList<Integer>();  
        str = new ArrayList<String>();  
        addap = new Adapter(this,ImagV,str);
        listView1.setAdapter(addap);
        
        con=this;
        
        
        for(int i=0;i<10;i++){
            Log.i("333"," Проверка 000");
         str.add("777");
         ImagV.add(R.drawable.ic_launcher); 
        }
        
        
    }
 
    
    
    
    
    
    
    public void Activ1(){
            
        Activ2();
    }
    
    
    
    public void Activ2(){
        
        //Log.i("333"," Проверка");
        ImagV.clear();  
        str.clear();
        addap.notifyDataSetChanged();
        Context f=con;
        
        if(e000!=10){
            
        }
        Acti77771();
        
    }
    private void Acti77771(){
        
        Log.i("333"," Проверка");
        for(int i=0;i<10;i++){
            Log.i("333"," Проверка 000");
         str.add("777");
         ImagV.add(R.drawable.ic_launcher); 
        }
    }
class Adapter
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public class Adapter extends BaseAdapter {
 
    private ArrayList<Integer> Bol41 = new ArrayList<Integer>();
    private ArrayList<String> str = new ArrayList<String>();
    private View view2=null;
    private LayoutInflater lInflater;
 
    private Context ctx;
    
    Adapter(Context context, ArrayList<Integer> Bol4, ArrayList<String> st) {    
        Bol41=Bol4;
        ctx=context;
        str=st;
 
      }
    
    
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Bol41.size();
    }
 
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return Bol41.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Log.i("333"," Проверка 1");
        View view = convertView;
        view2 = convertView;
        if (convertView == null) 
        {   
        lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = lInflater.inflate(R.layout.item2, parent, false); 
        }
        
        ((LinearLayout) view.findViewById(R.id.LL1)).setBackgroundResource((Integer) Bol41.get(position));    
        ((TextView) view.findViewById(R.id.tvDescr)).setText((String) str.get(position));
        
        
        
        
        
        view.findViewById(R.id.imageView1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {         
              
                Met();
            }
        });
        
        
        
        
        view2=null;         
        return view;
    }
    
    
    
    
    
    
    
    public void Met(){
        
        MainActivity yr = new MainActivity();   
        yr.Activ2();
        
    }
    
    
    
 
}
main
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LL1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:orientation="horizontal" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/ic_launcher" />
 
    <TextView
        android:id="@+id/tvDescr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
 
</LinearLayout>
item2
XML
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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.nametest.MainActivity" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="@string/hello_world" />
 
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="33dp" >
    </ListView>
 
</RelativeLayout>
Лог с ошибкой
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
05-23 20:21:56.559: D/AndroidRuntime(2540): Shutting down VM
05-23 20:21:56.567: W/dalvikvm(2540): threadid=1: thread exiting with uncaught exception (group=0xa6176908)
05-23 20:21:56.579: E/AndroidRuntime(2540): FATAL EXCEPTION: main
05-23 20:21:56.579: E/AndroidRuntime(2540): java.lang.NullPointerException
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.MainActivity.Activ2(MainActivity.java:67)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.Adapter.Met(Adapter.java:114)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.Adapter$1.onClick(Adapter.java:79)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.view.View.performClick(View.java:4204)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.view.View$PerformClick.run(View.java:17355)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Handler.handleCallback(Handler.java:725)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Looper.loop(Looper.java:137)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at java.lang.reflect.Method.invokeNative(Native Method)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at java.lang.reflect.Method.invoke(Method.java:511)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at dalvik.system.NativeStart.main(Native Method)
05-23 20:21:59.223: I/Process(2540): Sending signal. PID: 2540 SIG: 9
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
23.05.2015, 22:28 #9
Нашёл у тебя следующую ошибку:

В MainActivity ты подключаешь разметку setContentView(R.layout.main).
После этого ты ищешь там элемент listView1 = (ListView) findViewById(R.id.listView1);
Юмор в том что его нету на этой разметке. он находится на разметке item2.
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 00:47  [ТС] #10
Добавлено через 1 минуту
Mikalai, Ой...Сорри сорри... это я на форуме названия перепутал .. Вместо main - item2
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
24.05.2015, 01:29 #11
теперь проблема в адаптере. в строке

Java
1
((LinearLayout) view.findViewById(R.id.LL1)).setBackgroundResource((Integer) Bol41.get(position));
обращение к элементу из разметки main
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 01:33  [ТС] #12
Mikalai, main и item2 я перепутал местами(на форуме неправильно написал) То есть - main - это item2 а item2-это main
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
24.05.2015, 02:05 #13
Лучший ответ Сообщение было отмечено semiromid как решение

Решение

вот у тебя в адаптере метод

Java
1
2
3
4
    public void Met(){
        MainActivity yr = new MainActivity();
        yr.Activ2();
    }
тут ты создаёшь новый экземпляр MainActivity. Поэтому там всё пусто.

В адаптер ты ж передаёшь ссылку на майн активити(this). Её нужно подхватить и использовать, а не моздавать новыеэкземпляры. Адаптер должен выглядеть примерно так:

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
public class Adapter extends BaseAdapter {
 
    private ArrayList<Integer> Bol41 = new ArrayList<>();
    private ArrayList<String> str = new ArrayList<>();
    MainActivity ma;
 
    private Context ctx;
 
    Adapter(Context context, ArrayList<Integer> Bol4, ArrayList<String> st) {
        Bol41=Bol4;
        ctx=context;
        str=st;
        this.ma = (MainActivity) context;
    }
 
    @Override
    public int getCount() {
        return Bol41.size();
    }
 
    @Override
    public Object getItem(int position) {
        return Bol41.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i("333", " Проверка 1");
        View view = convertView;
        if (convertView == null)
        {
            LayoutInflater lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = lInflater.inflate(R.layout.main, parent, false);
        }
 
        view.findViewById(R.id.LL1).setBackgroundResource(Bol41.get(position));
        ((TextView) view.findViewById(R.id.tvDescr)).setText(str.get(position));
        view.findViewById(R.id.imageView1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Met();
            }
        });
        return view;
    }
 
    public void Met(){
        this.ma.Activ2();
    }
}
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 10:16  [ТС] #14
Сейчас заведу Eclipse и попробую.

Добавлено через 22 минуты
Mikalai, Вау работает!!! Спасибо! Я еще в начале писал, что ссылка меняется на метод))
0
Vladimirys
24.05.2015, 21:04     Вызов нестатического метода из другого класса
  #15

Не по теме:

Меняю ссылки, на методы, с вашей доплатой.

0
24.05.2015, 21:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 21:04
Привет! Вот еще темы с ответами:

Как изменить Textview из другого класса (класса адаптера RecyclerView)
У меня есть список RecyclerView тоесть этот файл Basket и файл что реализует...

Вызов метода в onCreate()
Здравствуйте.Пытаюсь загружать сохраненные данные при старте приложения и...

Вызов метода по таймеру
Здравствуйте, подскажите пожалуйста, почему при повторном нажатии таймер не...

Вызов java метода из native
Привет, чтот не пойму зачем у меня ошибка происходит... Значит что хочу и...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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