2015-05-28 108 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

這很好,但你已經做出了不必要的方法,使代碼變得複雜難以理解。 –