Intereting Posts
Предложения по созданию управления TreeView в Android Создание флажка с тремя состояниями на android Синтаксис Android Sqlite IN, NOT IN Мультиплеер Google Play Game Services с переключением активности DataBinding не работает после обновления Android Studio 2.3 Android: Какова лучшая практика, используя глобальную строку или намерения с дополнительными данными? Камера Zxing в портретном режиме на Android Не найдено выполнения для long org.opencv.core.Mat.n_Mat () error Использование OpenCV Модернизация 2 с данными только формы Значки AccountAuthenticator Ошибка: выполнение выполнено для задачи ': app: buildInfo Debug Loader' Как центрировать заголовок на панели инструментов (даже при отображении кнопки панели инструментов) Android: могу ли я создать представление / холст, который не является прямоугольным, но, например, круглый? Android: чтение XML из локального ресурса (для тестирования) Как поместить текст в drawable?

Вызвать общедоступный метод в классе Activity из другого класса?

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

public class MyActivity() extends Activity { onCreate() { MyClass myobj=new MyClass(); } public void Mymethod() {} } //HELPER CLASS IN A SEPARATE FILE public class MyClass() { MyClass(Context context) { } } 

Я попытался вызвать Mymethod () из экземпляра MyClass. Я бы очень признателен за любую помощь. Благодарю.

Solutions Collecting From Web of "Вызвать общедоступный метод в классе Activity из другого класса?"

Почему бы просто не передать активность конструктору, как

 public class MyActivity extends Activity { onCreate(){ MyClass myobj=new MyClass(MyActivity.this); } public void myMethod(){ } } //HELPER CLASS IN A SEPARATE FILE public class MyClass{ public MyClass(MyActivity act) { act.myMethod(); } } 

Сделайте этот метод как статический, чтобы вы могли вызывать без создания объекта класса

 public static void Mymethod() {} 

И так называть

 MainActivity.Mymethod(); 

Вероятно, это лучший способ сделать это. Вот как я это делаю. Он называется шаблоном дизайна Singleton:

 public class MyActivity extends Activity { private static MainActivity instance; public static MainActivity getInstance() { if(instance==null){ setInstance(this); } return instance; } public static void setInstance(MainActivity instance) { MainActivity.instance = instance; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setInstance(this); } } 

У меня был внутренний класс, который я хотел вывести в более общую библиотеку класса «Помощник». У меня была та же проблема, что и вы. Я обошел его, сделав вспомогательный класс абстрактным, с помощью одного абстрактного метода. Затем в моем пакете проектов я расширил вспомогательный класс вызовом конструктора в конкретном классе.

 public class MyActivity extends Activity { onCreate() { MyHelperClass = new MyHelperClass(this, "foobar"); } public void myMethod() { // Code... } } // In a different file public class MyHelperClass extends HelperClass { private MyActivity mInstance; public MyHelperClass(MyActivity act, String data) { super(); this.mInstance = act; this.mActivity = act; // Useful for calling generic Activity methods in the HelperClass this.mData = data; } protected void callMyActivityMethod() { mInstance.myMethod(); } } // In a different file public abstract class HelperClass { protected Activity mActivity; protected String mData; public HelperClass() { // Subclass will set variables } protected abstract void callMyActivityMethod(); // More code for all the other stuff the class does } 

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

Если я правильно понимаю вас, я считаю, что вы можете решить свои проблемы с помощью интерфейса в качестве обратного вызова.

////МЕРОПРИЯТИЯ/////////////////////////////////

  public class MyActivity() extends Activity { onCreate() { MyClass myObj=new MyClass(); //Set the listener on the object. Created as anonymous myObj.setListener(new MyClass.Listener() { myMethod(); }); } } public void myMethod(){ } 

////// Пользовательский класс //////////////////

 public class MyClass { Listener mListener; public interface Listener { public void onInterestingEvent(); } public void setListener(Listener listener) { mListener = listener; } public void someUsefulThingTheClassDoes() { //Do your code here and when you're ready to call the activity's method do this mListener.onInterestingEvent(); } } 

Я решил написать HelperClass MyClass как внутренний класс класса MyActivity. Это позволяет ему получить полный доступ к родительскому классу, но теперь это плохо. MyClass ограничен только классом MyActivity.

 public class MyActivity() extends Activity { onCreate() { MyClass myobj=new MyClass(); } public void myMethod() { } } //INNER CLASS public class MyClass { public MyClass() { } //I can directly access the MyMethod myMethod(); }