2015-04-03 15 views

回答

1

那麼,至於我,這是我開始學習Android時的第一個問題。但是,嘿,我會試着向你解釋爲什麼每個人都使用碎片:

  1. 碎片更容易與sidemenu管理。爲什麼?因爲如果您要將每個菜單項實現爲Activity - 您需要在菜單中的每個Activity中實施該「菜單部分」。菜單是有限的ActivityFragment只是其中的一部分 - 你可以添加片段Activity像在layout.xml中的視圖一樣簡單。

  2. 爲什麼你只需要活動?片段有getActivity()方法,這將返回給你一個家長Activity。您可以在片段的onCreateView(...)方法上實現您自己的片段佈局。一般來說,你可以在Activity中實現某種公共方法,然後調用((MyActivity)getActivity()).[your_method_name]()來實際調用你的Activity方法。

  3. 困難是學習的一部分,所以不要害怕去學習新東西。如果使用碎片90%的人則也許有使用它們的點,只是想想而已;)

+0

感謝保羅,您的意見非常令人鼓舞。我只是因爲無法找到如何在Fragment中獲取Remote API JSON數據而要求進行活動。從遠程Web API獲取數據的每個示例都使用「活動」。我真的沒有希望,現在我仍然試圖找出使用片段的方式。 :( – Harry 2015-04-04 18:36:22

+0

@哈利我可以試着幫助你,但我認爲我不完全理解你使用JSON的問題。你想達到什麼目的?你可以在列表中顯示你需要什麼的例子do(甚至使用Activity)? – 2015-04-05 10:58:40

+0

謝謝Paul。我願意在Fragment中調用任何API並解析JSON以顯示該片段的佈局文件(線性佈局)中的結果謝謝.JSON API示例爲http:// docs .blackberry.com/sampledata.json – Harry 2015-04-05 15:48:58

0

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); 
    } 

}

相關問題