如何从子类中的supper-class方法调用?

时间:2011-10-31 11:13:30

标签: java android methods fragment

如何从类 BasicActivity 调用方法 stackAFragment 从子类 Sub

我希望有机会使用菜单从任何扩展BasicActivity的Activity中替换我的Activity Sub 中的 Fragment 。我将为每个项目菜单在 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();
    }
}

4 个答案:

答案 0 :(得分: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(); }

   ....
}

答案 1 :(得分:1)

您可以创建BasicActivity类实现方法stackAFragment()并在子类中覆盖它。您还可以在BasicActivity中声明方法摘要,然后它将成为一个抽象类。

答案 2 :(得分:0)

super.stackAFragment()。但必须在BasicActivity中定义此方法。如果你愿意,它可能是抽象的。

答案 3 :(得分:0)

这应该为您提供所需的功能:

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