난 당신이 actionbar tabs
와 ViewPager
를 사용하는 것이 좋습니다 수 있습니다. 뷰 페이지 (viewpager)의 도움을 받아 5 개의 모든 조각에서 동일한 탐색 경로가 표시됩니다. 효율성에 오면, ViewPager
은 항상 다음 페이지와 이전 페이지도 준비하는 것 외에도 현재 페이지를 만듭니다. 사용자가 페이지를 스 와이프하는 동안 내용을 조금 더 빨리 볼 수 있습니다. 나는 항상 같은 것을 따르고 그것이 비효율적이라고 생각하지 않는다. 내 응용 프로그램 중 하나의
코드는 다음과 같습니다 :
public class MainActivity extends ActionBarActivity {
String[] titles;
ViewPager viewPager;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mListTitles;
public PagerTabStrip titleStrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewPager = (ViewPager) findViewById(R.id.pager);
TitleAdapter titleAdapter = new TitleAdapter(getSupportFragmentManager());
viewPager.setAdapter(titleAdapter);
viewPager.setCurrentItem(0);
mTitle = mDrawerTitle = getTitle();
mListTitles = getResources().getStringArray(R.array.drawerlist_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// sets up the drawer's list view with items and click listener
mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mListTitles));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// enables ActionBar app icon to behave as action to toggle nav drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
)
{
public void onDrawerClosed(View view)
{
getSupportActionBar().setTitle(mTitle);
}
public void onDrawerOpened(View drawerView)
{
getSupportActionBar().setTitle(mDrawerTitle);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null)
{
selectItem(0);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item))
{
return true;
}
else{
return false;
}
}
class TitleAdapter extends FragmentPagerAdapter{
private String titles[] = new String[]{"Expenses","Savings","Income"};
private Fragment frags[] = new Fragment[titles.length];
public TitleAdapter(FragmentManager fm) {
super(fm);
frags[0] = new Fragment1();
frags[1] = new Fragment2();
frags[2] = new Fragment3();
}
@Override
public CharSequence getPageTitle (int position){
Log.v("TitleAdapter - getPageTitle=", titles[position]);
return titles[position];
}
@Override
public Fragment getItem(int position) {
Log.v("TitleAdapter - getItem=", String.valueOf(position));
return frags[position];
}
@Override
public int getCount() {
return frags.length;
}
}
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
selectItem(position);
}
}
private void selectItem(int position)
{
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mListTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title)
{
mTitle = title;
getSupportActionBar().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);
}
}
는 어떻게 5 개 활동을로드하는? 아니면 5 조각? 문제는 탐색 서랍을 사용하면 단편을 사용하고 fragment.replace 메소드를 사용하면 현재 단편을 파괴하고 해당 단편에 새 단편을 적용한다는 것입니다. –
오케이, 그래서 나는 현재 코드를 다시 작성하여 5 개의 Activity 클래스를 하나로 변환 한 다음 탐색 서랍을 추가해야합니까? (현재 내 앱에는 서랍이 없습니다.) – abdfahim
만약 당신이 안드로이드 하이브 링크를 따라한다면 그것은 당신에게 가장 좋을 것입니다 ... 나를 믿으세요 :) –