AppCompatActivity
をコードを共有するためにコードを集中化したいと考えています。 DrawerLayout
などAppCompatActivityを拡張してコードを集中化するにはどうすればいいですか? DrawerLayout?
しかし、私はNullPointerException
が発生します。ここに私のコードです:
MasterActivity
public class MasterActivity extends AppCompatActivity {
public static final String TAG = "MasterActivity";
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected void setupDrawer() {
// Drawer
mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_drawer, R.string.close_drawer) {
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
};
mDrawerLayout.addDrawerListener(mDrawerToggle);
}
}
ChildActivity
public class ChildActivity extends MasterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_child);
setupDrawer();
}
}
activity_child.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ChildActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- Main Content -->
</LinearLayout>
<LinearLayout android:id="@+id/llv_left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical"
android:background="#888" >
<!-- Drawer Content -->
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
NPEはで表示されます。
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
エラーメッセージは次のとおりです。上の仮想メソッド '空android.support.v4.widget.DrawerLayout.setDrawerShadow(int型、int型)' を呼び出すため
試みnullオブジェクト参照
は、レイアウトXMLから変数mDrawerLayout
が見つからないことが明らかです。 R.id.drawer_layout
はR.layout.activity_child
にあります。 ChildActivity
がAppCompatActivity
の場合、NPEは表示されません。
どうすれば解決できますか?
には 'activity_child.xml'を投稿することができますか? –
質問に追加しました – Raptor
'MasterActivity'が' DrawerLayout'をホストしてそのサブクラスに提供することを意図している場合は、 'View'コンテンツを設定し、' MasterActivity'に 'DrawerLayout'を設定する必要があります。あなたのサブクラスでは、 'onCreate()'の 'super'呼び出しの後、サブクラスの' View'をメインコンテンツ 'LinearLayout'に展開します。 –