[英]Call a method in different activities from a non-activity class
我有3個具有相同功能的類。 H類是控制器類,因此我制作了setactivity類來獲取調用它的活動的實例。 現在,我必須從非Activity的控制器類H調用當前初始化類的函數userleft()。
我得到的錯誤是“方法Activity類型未定義userleft()方法”,並且我知道會出現異常,因為Activity類不包含名為userLeft()的方法。 但是使這項工作最好的方法是什么?
請參閱下面的應用程序結構。
public class A extends Activity {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
public class B extends Activity {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
public class C extends Activity {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
我還有另一個非活動課
public class H {
public static H getInstance() {
if (instance == null) {
instance = new H();
}
return instance;
}
public void setActivity(Activity activity) {
this.activityGame = activity;
}
public void randomCallBack(){
activityGame.userleft();
}
}
謝謝!
您需要像下面這樣重新設計您的課程
聲明基礎活動課程
public abstract class BaseActivity extends Activity {
public abstract void userleft();
}
並像這樣聲明你的班級
public class A extends BaseActivity {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
@Override
public void userleft() {
}
}
現在修改您的非活動類,例如
public class H {
public static H getInstance() {
if (instance == null) {
instance = new H();
}
return instance;
}
public void setActivity(BaseActivity activity) {
this.activityGame = activity;
}
public void randomCallBack(){
activityGame.userleft();
}
}
現在,您將可以為任何子類活動調用方法。
在您的randomCallBack()方法中,您有一個Activity對象,Activity類不包含一個名為userLeft()的方法,因此,通常會收到此類異常。 因此,您有兩種方法可以解決此問題:
您可以將activityGame強制轉換為相應的類,如下所示:
public void randomCallBack(){
if (activityGame instanceof A) {
((A)activityGame).userleft();
}
if (activityGame instanceof B) {
((B)activityGame).userleft();
}
if (activityGame instanceof C) {
((C)activityGame).userleft();
}
}
或者,以更好的方式,創建一個接口,該接口由類A,B和C實現,並由H類使用。 像這樣:
public interface UserLeft {
public void userleft();
}
public class A extends Activity implements UserLeft {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
public class B extends Activity implements UserLeft {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
public class C extends Activity implements UserLeft {
void onCreate(Bundle savedInstanceState) {
H.getInstance().setactivity(this);
}
public void userleft() {
}
}
public class H {
UserLeft activity;
public static H getInstance() {
if (instance == null) {
instance = new H();
}
return instance;
}
public void setActivity(UserLeft activity) {
this.activityGame = activity;
}
public void randomCallBack(){
activityGame.userleft();
}
}
您忘記了實例變量聲明:) private Activity activityGame = null;
當然, Activity類沒有名為userleft()
方法。
你需要你的可變投 activityGame
你這樣的具體類別:
public class H {
private Activity activityGame = null;
public static H getInstance() {
if (instance == null) {
instance = new H();
}
return instance;
}
public void setActivity(Activity activity) {
this.activityGame = (<CAST TO YOUR CLASS>) activity;
}
public void randomCallBack(){
activityGame.userleft();
}
}
編輯:
請嘗試以下方法:
public void setActivity(Activity activity) {
this.activityGame = (activity.getClass()) activity;
}
活動類沒有userleft方法,因此您不能通過參考活動來調用該方法。 您可以使用方法userleft定義一個BaseActivity作為這些類的父類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.