2015-05-28 109 views
0

我有一个基本活动,我的所有活动都从中延伸。这门课包括基本知识,如工具栏和导航抽屉。动态地将工具栏添加到抽象活动

我正在寻找一种解决方案,该解决方案将允许我在扩展活动中重写方法,以便我可以更改活动将使用的工具栏的类型。

public abstract class BaseActivity extends AppCompatActivity { 

private Toolbar mToolbar; 
private FrameLayout mContentFrame; 
private ActivityFragment mActivityFragment; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(setLayout()); 
    initViews(); 
    initToolbar(); 
} 

protected int setLayout() { 
    return R.layout.activity_base; 
} 

//I want to override this and provide a different toolbar layout! 
protected int setToolbarLayout(){ 
    return R.layout.toolbar; 
} 

protected void initViews() { 
    mToolbar = (Toolbar) findViewById(R.id.toolbar); 
    mContentFrame = (FrameLayout) findViewById(R.id.contentFrame); 
} 

private void initToolbar() { 
    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     mToolbar.setElevation(10f); 
    } 
} 

protected void setContentFragment(ActivityFragment fragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(getContentFrame().getId(), fragment).commit(); 
    supportInvalidateOptionsMenu(); 
    this.mActivityFragment = fragment; 
    setTitle(fragment.getTitle(this)); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public Toolbar getToolbar() { 
    return mToolbar; 
} 

public FrameLayout getContentFrame() { 
    return mContentFrame; 
} 

public ActivityFragment getActivityFragment() { 
    return mActivityFragment; 
} 

我试图膨胀的setContentView(后工具栏)和动作条设置它,但它似乎没有图标或窗口小部件!

回答

1

好吧大家(无论谁担心)我想通了。我只需要在调用setContentView()之前膨胀我的contentView。一旦我有了膨胀,我添加了夸大的工具栏视图!

public abstract class BaseActivity extends AppCompatActivity { 

private Toolbar mToolbar; 
private FrameLayout mContentFrame; 
private ActivityFragment mActivityFragment; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(inflateLayout()); 
    initViews(); 
    initToolbar(); 
} 

protected int getLayoutRes(){ 
    return R.layout.activity_base; 
} 

protected int getToolbarLayout(){ 
    return R.layout.toolbar; 
} 

private View inflateLayout() { 
    View contentView = getLayoutInflater().inflate(getLayoutRes(), null, false); 
    attachToolbarToLayout(getLayoutInflater(), (ViewGroup) contentView); 
    return contentView; 
} 

private void attachToolbarToLayout(LayoutInflater inflater, ViewGroup parent){ 
    mToolbar = (Toolbar) inflater.inflate(getToolbarLayout(),parent,false); 
    parent.addView(mToolbar,0); 
} 

protected void initViews() { 
    mContentFrame = (FrameLayout) findViewById(R.id.contentFrame); 
} 

private void initToolbar() { 
    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     mToolbar.setElevation(10f); 
    } 
} 

protected void setContentFragment(ActivityFragment fragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(getContentFrame().getId(), fragment).commit(); 
    supportInvalidateOptionsMenu(); 
    this.mActivityFragment = fragment; 
    setTitle(fragment.getTitle(this)); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public Toolbar getToolbar() { 
    return mToolbar; 
} 

public FrameLayout getContentFrame() { 
    return mContentFrame; 
} 

public ActivityFragment getActivityFragment() { 
    return mActivityFragment; 
} 
+1

这很好,但你已经做出了不必要的方法,使代码变得复杂难以理解。 –