2016-05-04 71 views
1

我從api獲取活動名稱(直到現在我正在使用項目中的活動)。但是現在有些我做了碎片。 就像現在我開始我的活動作爲檢查類是片段還是活動

Class<?> myClass = Class.forName("com.aksu.emp." + ((com.core.Menu) o) 
         .getActivityName()); 
Activity activity = (Activity) myClass.newInstance(); 
ActivityRedirect(activity); 

如何檢查,如果它是碎片,如果一些活動我已經轉換成片段的交換片段。

+2

使用'instanceOf' – sonngaytho

+0

http://www.javatpoint.com/downcasting-with-instanceof-operator –

回答

3

手動實例化活動等不是一個好主意。假設你的對象是在o,你應該做這樣的事情

if (o instanceof Activity) { 
    if (o instanceof ActivityA) { 
     // go to A 
    } else if (o instanceof ActivityB) { 
     // go to B 
    } 
} if (o instanceof Fragment) { 
    // do something else 
} 

對於活動,你甚至可以簡化(如果你不需要通過捆綁或類似發送特定的數據)。

if (o instanceof Activity) { 
    context.startActivity(context, ((Activity) o).class)); 
} 
+0

號,我的問題是不是這樣的。我從api獲取字符串爲「com.aksu.emp.notice.List」,它是一個擴展片段的類。和其他字符串作爲「com.aksu.emp.summary.Data」這個類擴展活動如何轉換這些字符串來檢查它是片段還是活動。 –

+0

我不會擺弄轉換字符串到活動和反射,可能會更好地使用類似'if(apiStr.equals(「com.aksu.emp.notice.List)){//開始此活動}' –

+0

約20個活動和一些片段,其他20個如果 –

0

使用反射來獲得父母。這樣的事情:

myClass.class.getSuperclass() 

所以你可以找出父母是否是一個活動或其他類。

0

問題是首先檢查字符串是片段還是類,然後執行相應的操作。我解決了它。

try { 
      if (((com.core.Menu) o).getActivityName() != null) { 
       Class<?> myClass = Class.forName("com.aksu.emp." + ((com.core.Menu) o) 
         .getActivityName()); 
       try { 
        Activity activity = (Activity) myClass.newInstance(); 
        ActivityRedirect(activity); 

       } catch (Exception e) { // its not an activity it could be fragment 
        Fragment fragment = (Fragment) myClass.newInstance(); 
        fragmentOrganizer.openFragment(fragment); 
       } 
      } 
     } catch (Exception e) {// ooh string is not in correct format for both activity and fragment 
      new ExceptionHandler(this).caughtException(e); 
     }