我想要導航菜單完成。我們能否將導航菜單與Activites一起使用,而不是碎片?
回答
那麼,至於我,這是我開始學習Android時的第一個問題。但是,嘿,我會試着向你解釋爲什麼每個人都使用碎片:
碎片更容易與sidemenu管理。爲什麼?因爲如果您要將每個菜單項實現爲
Activity
- 您需要在菜單中的每個Activity
中實施該「菜單部分」。菜單是有限的Activity
和Fragment
只是其中的一部分 - 你可以添加片段Activity
像在layout.xml中的視圖一樣簡單。爲什麼你只需要活動?片段有
getActivity()
方法,這將返回給你一個家長Activity
。您可以在片段的onCreateView(...)
方法上實現您自己的片段佈局。一般來說,你可以在Activity中實現某種公共方法,然後調用((MyActivity)getActivity()).[your_method_name]()
來實際調用你的Activity方法。困難是學習的一部分,所以不要害怕去學習新東西。如果使用碎片90%的人則也許有使用它們的點,只是想想而已;)
感謝保羅,您的意見非常令人鼓舞。我只是因爲無法找到如何在Fragment中獲取Remote API JSON數據而要求進行活動。從遠程Web API獲取數據的每個示例都使用「活動」。我真的沒有希望,現在我仍然試圖找出使用片段的方式。 :( – Harry 2015-04-04 18:36:22
@哈利我可以試着幫助你,但我認爲我不完全理解你使用JSON的問題。你想達到什麼目的?你可以在列表中顯示你需要什麼的例子do(甚至使用Activity)? – 2015-04-05 10:58:40
謝謝Paul。我願意在Fragment中調用任何API並解析JSON以顯示該片段的佈局文件(線性佈局)中的結果謝謝.JSON API示例爲http:// docs .blackberry.com/sampledata.json – Harry 2015-04-05 15:48:58
BaseActivity.java
public class BaseActivity extends ActionBarActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
protected RelativeLayout _completeLayout, _activityLayout;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer);
// if (savedInstanceState == null) {
// // on first time display view for first nav item
// // displayView(0);
// }
}
public void set(String[] navMenuTitles, TypedArray navMenuIcons) {
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items
if (navMenuIcons == null) {
for (int i = 0; i < navMenuTitles.length; i++) {
navDrawerItems.add(new NavDrawerItem(navMenuTitles[i]));
}
} else {
for (int i = 0; i < navMenuTitles.length; i++) {
navDrawerItems.add(new NavDrawerItem(navMenuTitles[i],
navMenuIcons.getResourceId(i, -1)));
}
}
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
// getSupportActionBar().setIcon(R.drawable.ic_drawer);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, // nav menu toggle icon
R.string.app_name, // nav drawer open - description for
// accessibility
R.string.app_name // nav drawer close - description for
// accessibility
) {
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
supportInvalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getSupportActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
supportInvalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getSupportMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
} else {
mDrawerLayout.openDrawer(mDrawerList);
}
}
return super.onOptionsItemSelected(item);
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
// boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
// menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
switch (position) {
case 0:
Intent intent = new Intent(this, FirstActivity.class);
startActivity(intent);
finish();// finishes the current activity
break;
case 1:
Intent intent1 = new Intent(this, SecondActivity.class);
startActivity(intent1);
finish();// finishes the current activity
break;
// case 2:
// Intent intent2 = new Intent(this, third.class);
// startActivity(intent2);
// finish();
// break;
// case 3:
// Intent intent3 = new Intent(this, fourth.class);
// startActivity(intent3);
// finish();
// break;
// case 4:
// Intent intent4 = new Intent(this, fifth.class);
// startActivity(intent4);
// finish();
// break;
// case 5:
// Intent intent5 = new Intent(this, sixth.class);
// startActivity(intent5);
// finish();
// break;
default:
break;
}
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
項目..
public class NavDrawerItem {
private String title;
private int icon;
public NavDrawerItem() {
}
public NavDrawerItem(String title, int icon) {
this.title = title;
this.icon = icon;
}
public NavDrawerItem(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
public int getIcon() {
return this.icon;
}
public void setTitle(String title) {
this.title = title;
}
public void setIcon(int icon) {
this.icon = icon;
}
}
適配器
public class NavDrawerListAdapter extends BaseAdapter {
private Context context;
private ArrayList<NavDrawerItem> navDrawerItems;
public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){
this.context = context;
this.navDrawerItems = navDrawerItems;
}
@Override
public int getCount() {
return navDrawerItems.size();
}
@Override
public Object getItem(int position) {
return navDrawerItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.drawer_list_item, null);
}
ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon);
TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
imgIcon.setImageResource(navDrawerItems.get(position).getIcon());
txtTitle.setText(navDrawerItems.get(position).getTitle());
return convertView;
}
}
FirstActivity.java
public class FirstActivity extends BaseActivity {
private String[] navMenuTitles;
private TypedArray navMenuIcons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);// load icons from
// strings.xml
set(navMenuTitles, navMenuIcons);
}
}
- 1. 與sherlockactionbar在碎片導航不起作用
- 2. 是否有可能將內部碎片和外部碎片結合在一起?
- 3. 導航到不起作用的菜單
- 4. 導航菜單懸停不起作用
- 5. 是否正確使用th:replace/th:insert而不使用碎片?
- 6. 與導航菜單
- 7. 幻燈片導航菜單
- 8. Wordpress導航菜單圖片
- 9. Android - 導航抽屜碎片
- 10. Android碎片導航抽屜
- 11. 導航菜單下拉菜單不起作用Angular4 Bootstrap 3
- 12. 導航欄菜單收起不打開
- 13. 是否可能從碎片中獲取視圖,而不是這個碎片的一部分?
- 14. Android導航抽屜碎片不顯示
- 15. 側邊菜單不起作用的內部碎片
- 16. 讓我的導航菜單使用CodeIgniter
- 17. addToBackStack不起作用,關閉活動而不是彈出碎片
- 18. 我的導航菜單在IE上不起作用<9
- 19. 我的導航翻轉菜單欄不起作用
- 20. 將導航菜單懸停的文本顏色不起作用
- 21. (Android)我的簡單導航抽屜碎片不起作用 - 請參閱錯誤圖片
- 22. 導航菜單使用jquery
- 23. jquerymobile:導航不能與jquery.mobile-1.0a2一起使用
- 24. 我如何使用setRetainInstance(true)將碎片與碎片分開並將它們添加到backstack中?
- 25. 將「漢堡包」與導航菜單結合起來
- 26. 不使用碎片的多個活動的通用導航抽屜。是否有可能在android
- 27. 如何將碎片佈局與導航抽屜佈局結合
- 28. 使用菜單項添加按鈕單擊事件而不是導航url
- 29. Bullet Point是我的導航菜單
- 30. 菜單自動啓用不能與NSTabView一起使用
沒有人會寫代碼你,直到你嘗試花花公子:) – 2015-04-03 11:41:40
剛開始對項目選擇新的活動。 – Harry 2015-04-03 12:05:12