Android导航抽屉抽象

时间:2013-12-15 13:09:57

标签: android inheritance layout abstraction

我知道之前已经问过这个问题(另外2个我发现了类似的问题),但他们没有解决这个场景的这一方面!

这就是场景,我创建了一个类:

public class BaseActivity extends ActionBarActivity {

  // Implemeted the Actionbar and navigation drawer here!
  // and it containts onCreate method and setContentView
}

BaseActivity XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/base_nav_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    </LinearLayout>
    <ListView
            android:id="@+id/base_left_drawer"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#dddddd"/>
    <ListView
            android:id="@+id/base_right_drawer"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#dddddd"/>
</android.support.v4.widget.DrawerLayout>
然后

扩展了我的主要课程/活动:

public class Main extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }

和这里的主要活动XML:

<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:id="@+id/stream_new_layout"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="hi dude"/>    
</LinearLayout>

所以现在我可以在我的Main活动中看到Actionbar和Navigation抽屉,但是,如果我尝试在我的Main活动上使用setContectView(R.layout.main)来使用我为此活动特定创建的xml布局,导航抽屉将不再出现了;我猜因为主要活动上的onCreatesetContectView会覆盖我扩展的BaseActivity中的相同语句。对此有何解决方案?

1 个答案:

答案 0 :(得分:1)

我希望我理解正确:您正在setContentView()使用BaseActivity设置抽屉,setContentView()使用MainActivity来完成布局的其余部分建立? 如果是这样的话:它将无法正常工作。第二次执行setContentView()它将替换旧布局,然后就没有抽屉了。 您必须在setContentView() MainActivity中的setContentView()布局中使用抽屉。 另外,不要两次使用{{1}},第一次没用。