Tôi muốn có AbstractMainActivity tạo Ngăn điều hướng. Trong đó tôi cũng nên xử lý các nhấp chuột vào các mục trình đơn và sau đó gọi các hoạt động mới. Trong những hoạt động đó, tôi muốn sử dụng lại cùng một ngăn điều hướng.Ngăn điều hướng Android (hoạt động gọi điện) với AbstractMainActivity
Tôi sẽ mở rộng trong các lớp con bằng AbstractMainActivity và gọi hàm getLayoutResourceID khác với từng lớp con (như được đề xuất ở đây: android how to create my own Activity and extend it?).
Vấn đề là, bây giờ trong AbstractMainActivity nơi tôi muốn xây dựng ngăn điều hướng, tôi không có quyền truy cập vào phần tử bố trí ngăn điều hướng (xml), vì dĩ nhiên tôi muốn có bố cục cơ sở khác nhau cho các lớp con.
Tôi có cần phải "bao gồm bố cục" trong tất cả các tệp bố cục lớp con không? Nhưng điều này không hiệu quả, tôi phải làm gì sai nếu tôi muốn sử dụng Hoạt động thay vì Phân đoạn bằng Ngăn điều hướng?
public abstract class MainActivity extends Activity {
private String[] menuItems;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setContentView(getLayoutResourceId());
menuItems = getResources().getStringArray(R.array.menu_items);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menuItems));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
}
protected abstract int getLayoutResourceId();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
selectItem(position);
}
/** Swaps fragments in the main content view */
private void selectItem(int position) {
//Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
// args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
Intent intent = new Intent(MainActivity.this, ProductListActivity.class);
startActivity(intent);
}
}
public class ProductListActivity extends MainActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.options_menu, menu);
return true;
}
@Override
protected int getLayoutResourceId() {
// TODO Auto-generated method stub
return R.layout.activity_product_list;
}
Đây là cách bố trí của các danh sách sản phẩm sub-class (activity_product_list.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ProductList" >
<include layout="@layout/activity_main"/>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" >
</ListView>
Đây là cách bố trí của ngăn điều hướng (activity_main.xml):
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="300dp"
android:layout_height="500dp" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#c3c3c3"/>
Nhưng không hoạt động, nhưng nếu tôi không có nó, tôi nhận được ngoại lệ con trỏ null khi lớp con của tôi gọi onCreate của lớp trừu tượng, nơi tôi muốn xây dựng Ngăn Điều hướng, nó không tìm thấy các thành phần layout thiết lập danh sách và bố cục (R.id.left_drawer hoặc R.id.drawer_layout)!
Bạn đã làm gì? Tôi có cùng một câu hỏi. – theblang
@mattblang Theo dõi liên kết [this] (http://naddydroid.blogspot.in/). – Naddy