2011-10-31 85 views
2

如何從類BasicActivity調用方法stackAFragment從子類Sub如何從子類中的超類方法調用?

我想有一個機會取代片段在我的活動從使用菜單擴展BasicActivity任何活動。我將爲每個項目菜單在Sub中創建一個方法。下面是一個簡單的例子,我怎麼看它:

public class BasicActivity extends FragmentActivity { 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.m_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.stad: 
     TabHost tabHost = (TabHost) getParent().findViewById(android.R.id.tabhost); 
     tabHost.setCurrentTab(4); //here is me Sub.class 
     //How to call method stackAFragment here? 
     break; 
     default: 
     return false;  
    } 
    return true; 
    } 
} 

子類

public class Sub extends BasicActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sub);   
    } 

    public void stackAFragment() { 
     Fragment f = new StadFr();  
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.the_frag, f); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 
} 

回答

2

BasicActivity(例如爲空實現)中創建一個可覆蓋的方法,並在Sub中覆蓋它。

public class BasicActivity extends FragmentActivity { 

    protected void onTabChanged(){ } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.stad: 
      TabHost tabHost = (TabHost) getParent().findViewById(android.R.id.tabhost); 
      tabHost.setCurrentTab(4); //here is me Sub.class 
      onTabChanged(); 
     break; 
     default: 
     return false;  
    } 
    return true; 
} 

public class Sub extends BasicActivity { 

    protected void onTabChanged() { stackAFragment(); } 

    .... 
} 
+0

這正是我想要的!謝謝!!!) – Sviatoslav

1

你可以讓你BasicActivity類實現方法stackAFragment()並在子類中覆蓋它。您也可以在您的BasicActivity中聲明方法摘要,然後該摘要將成爲抽象類。

0

super.stackAFragment()。但是此方法必須在您的BasicActivity中定義。如果你想要,它可能是抽象的。

0

這應該爲您提供有用的功能:

Activity activity = getLocalActivityManager().getActivity(tabHost().getCurrentTabTag());  
if(activity instanceof Sub) 
    ((Sub) activity).stackAFragment();