Есть ли способ использовать метод из одного класса (Activity) в другом?

Начиная с моего предыдущего поста, я работаю над тем, чтобы некоторые кнопки были функциональными. И некоторые из этих кнопок называют определенных людей. Например, мама

У меня есть фактический код набора в другом файле под названием "DialHomeDevice" - Да, я люблю Звездные врата.

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

callMomBtn.setOnClickListener(new OnClickListener() {

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub 
 Intent dialMom = new Intent(MainActivity.this, DHD.dialMom());
 startActivity(dialMom.);
 }
 });

DHD был объявлен в верхней части файла.

private DialHomeDevice DHD = new DialHomeDevice();

Также здесь приведен код для этого метода DHD:

public void dialMom() {
 prefs = getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE);
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
 + prefs.getLong(Constants.momNumber, 411)));
 startActivity(callIntent);
}

И константы - это то место, где я храню цифры.

Теперь меня озадачивает то, что я не могу использовать DHD.dialMom() внутри намерения позвонить. Каков наилучший способ исправить это.

Intent dialMom = новый Intent (MainActivity.this, DHD.dialMom()); дает следующую ошибку: конструктор Intent (MainActivity, void) не определен

И startActivity (callIntent); дает мне эту ошибку: метод startActivity (Intent) в типе Activity не применим для аргументов (Class)

1 ответ

Чтобы исправить ошибку конструктора, вам просто нужно добавить пустой класс в конструктор.

public DialHomeDevice(){}

Использование намерения все же не было бы лучшим решением для этого. Синглтон отлично подойдет и позволит вам позвонить в любое время.

Чтобы использовать его, вы просто вызываете DialHomeDevice.newInstance(someObject) или DialHomeDevice.getInstance().desiredMethod(). Предостережение заключается в том, что это будет работать только в том случае, если вы убедитесь, что одновременно используется не более одного экземпляра и что потоковая обработка обрабатывается соответствующим образом.

public class DialHomeDevice {
 private static DialHomeDevice ourInstance = null;
 private Activity context;
 private Object objAnything;

 public DialHomeDevice(){
 if ( ourInstance == null ) { ourInstance = this; }
 }

 public static DialHomeDevice newInstance(Object objAnything) {
 if ( ourInstance == null ) {
 ourInstance = new DialHomeDevice();
 }
 ourInstance.objAnything = objAnything;
 return ourInstance;
 }

 public static DialHomeDevice getInstance(){
 if ( ! isInstantiated() ) { ourInstance = new DialHomeDevice(); }
 return ourInstance;
 }

 static boolean isInstantiated(){
 return (ourInstance != null);
 }

 static void setObjAnything(Object objAnything){
 outInstance.objAnything = objAnything;
 }
}

licensed under cc by-sa 3.0 with attribution.