2012-10-03 34 views
1

在我的Android片段的內部我有以下簡單的檢查,以確定我的應用程序是否運行在平板電腦上(平板電腦上有3個視圖打開,視圖2和3沒有看到一個電話,只有第一個被認爲是)上findViewById在不同的類中的靜態方法

boolean mDualPane; 
View detailsFrame = getActivity().findViewById(R.id.content1); 
mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; 

這個作品在片段本身很好,但我需要在許多片段完全相同的檢查,所以我想有它在我的「MiscMethods」類我用於多個類中的常用方法。現在,在我的課同鱈魚看起來像這樣:

public class MiscMethods{  
public static boolean landscapeChecker(){ 
    boolean mDualPane; 
    View detailsFrame = getActivity().findViewById(R.id.content1); 
    mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; 
    return mDualPane; 
} 
} 

getActivity(如果我刪除findViewById)是未定義的類型MiscMethods。

現在我有一個上下文中的應用程序類喜歡這裏

public static void ErrorToast(int errorCode) { 
    String errorString = null; 
    switch (errorCode) { 
    case 1: 
     errorString = App.getContext().getString(R.string.error_tooManyFieldsEmpty); 
     break; 
    case 2: 
     errorString = App.getContext().getString(R.string.error_featureComingSoon); 
     break; 
    case 3: 
     errorString = App.getContext().getString(R.string.error_SwitchBreak); 
     break; 
    default: 
     errorString="Wrong Error Code"; 
     break; 
    } 
    Toast errormsg = Toast.makeText(App.getContext(), errorString, Toast.LENGTH_SHORT); 
    errormsg.setGravity(Gravity.CENTER, 0, 0); 
    errormsg.show(); 
} 

但這App.getContext()也沒有幫助。

我該如何解決這個問題?

回答

3

看起來你正在尋找一個快速和骯髒的解決方案,所以這裏有兩個:

  • 更改方法簽名的採取活動作爲參數:

    public static boolean landscapeChecker(Activity activity)

    在該方法中,使用傳入的activity代替getActivity()。從您的各種活動中調用它,如boolean mDualPane = landscapeChecker(this)

  • 子類Activity並代之以放置該方法。對於此解決方案,您將創建一個類MyActivity extends Activity,然後使您的各種活動extend MyActivity而不是extend Activity。在該方法中,使用this代替getActivity()

+0

非常感謝!第一個解決方案完美地工作,雖然因爲它是碎片我需要landscapeChecker(getActivity());非常感謝 :) – Killerpixler

0

您只需在oncreate之前聲明MainActivity靜態元素。 此後在底部創建一個metod;

static TextView textView; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
..................................................... 

textView = (TextView) findViewById(R.id.texview); 
} 

public static void upTex(String up) { 


     textView.setText(up); 
    } 


} 

//other file class 
public class other{ 

    public void method(){ 
    upText("jaja"); 
} 
相關問題