如何处理回在android的活动抽屉名单片段事件 [英] how to handle back event in drawer list fragment in android activity
问题描述
我已经开发了有一个活动,这个活动也有增加抽屉列表项(侧面)的一些片段。所以我的问题是,当我在抽屉里的任何片段项目,然后打开pressed后退按钮的应用程序应用程序将close.So如何处理回事件类似3 - 当pressed回其开放式precious片段2 -1
主要活动的code
公共类MainActivity扩展FragmentActivity {
私人DrawerLayout DrawerLayout;
私人的ListView DrawerList;
私人ActionBarDrawerToggle DrawerToggle; 私人CharSequence的DrawerTitle; 私人CharSequence的称号; 私有String [] MenuTitles;
私人TypedArray MenuIcons; 私人DrawerListAdapter适配器;
私人的ArrayList< DrawerItem> DrawerItems; @燮pressLint(NewApi)
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); 标题= DrawerTitle =的getTitle(); MenuTitles = getResources()getStringArray(R.array.drawer_items)。 MenuIcons = getResources()obtainTypedArray(R.array.drawer_icons)。 DrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
DrawerList =(ListView控件)findViewById(R.id.list_slidermenu); DrawerItems =新的ArrayList< DrawerItem>(); DrawerItems.add(新DrawerItem(MenuTitles [0],MenuIcons.getResourceId(
0,-1))); DrawerItems.add(新DrawerItem(MenuTitles [1],MenuIcons.getResourceId(
1,-1))); DrawerItems.add(新DrawerItem(MenuTitles [2],MenuIcons.getResourceId(
2,-1))); DrawerItems.add(新DrawerItem(MenuTitles [3],MenuIcons.getResourceId(
3,-1))); DrawerItems.add(新DrawerItem(MenuTitles [4],MenuIcons.getResourceId(
4,-1))); DrawerItems.add(新DrawerItem(MenuTitles [5],MenuIcons.getResourceId(
5,-1))); DrawerItems.add(新DrawerItem(MenuTitles [6],MenuIcons.getResourceId(
6,-1))); MenuIcons.recycle(); DrawerList.setOnItemClickListener(新SlideMenuClickListener()); 适配器=新DrawerListAdapter(getApplicationContext(),DrawerItems);
DrawerList.setAdapter(适配器); getActionBar()setDisplayHomeAsUpEnabled(真)。
getActionBar()setHomeButtonEnabled(真)。 DrawerToggle =新ActionBarDrawerToggle(这一点,DrawerLayout,
R.drawable.ic_drawer,R.string.app_name,R.string.app_name){
公共无效onDrawerClosed(查看视图){
。getActionBar()的setTitle(标题); invalidateOptionsMenu();
} 公共无效onDrawerOpened(查看drawerView){
。getActionBar()的setTitle(DrawerTitle); invalidateOptionsMenu();
}
};
DrawerLayout.setDrawerListener(DrawerToggle); 如果(savedInstanceState == NULL){ displayView(0);
}
} 私有类SlideMenuClickListener工具
ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图<>母公司,观景,INT位置,
长ID){ displayView(位置);
}
} @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
。getMenuInflater()膨胀(R.menu.main,菜单);
返回true;
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){ 如果(DrawerToggle.onOptionsItemSelected(项目)){
返回true;
} 开关(item.getItemId()){
案例R.id.action_settings:
返回true;
默认:
返回super.onOptionsItemSelected(项目);
}
} @覆盖
prepareOptionsMenu(菜单菜单)上公共布尔{ 布尔drawerOpen = DrawerLayout.isDrawerOpen(DrawerList);
menu.findItem(R.id.action_settings).setVisible(drawerOpen!);
返回super.on prepareOptionsMenu(菜单);
} @燮pressLint(NewApi)
私人无效displayView(INT位置){ 片段片段= NULL;
开关(位置){
情况下0:
片段=新Home_Activity();
打破;
情况1:
片段=新Activity_two();
打破;
案例2:
片段=新Activity_three();
打破;
案例3:
片段=新Activity_four();
打破;
情况4:
片段=新Activity_five();
打破;
情况5:
片段=新Activity_six();
打破;
情况6:
片段=新Activity_seven();
打破; 默认:
打破;FragmentTransaction交易= getFragmentManager()调用BeginTransaction()。
transaction.replace(R.id.frame_container,片段);
transaction.addToBackStack(NULL);
器transaction.commit();
} 如果(片段!= NULL){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container,片段).commit(); DrawerList.setItemChecked(位置,真正的);
DrawerList.setSelection(位置);
的setTitle(MenuTitles [位置]);
DrawerLayout.closeDrawer(DrawerList);
}其他{ Log.e(MainActivity,出错创建片段);
}
} @燮pressLint(NewApi)
@覆盖
公共无效的setTitle(CharSequence的标题){
标题=称号;
。getActionBar()的setTitle(标题);
} @覆盖
保护无效onPostCreate(捆绑savedInstanceState){
super.onPostCreate(savedInstanceState); DrawerToggle.syncState();
}
一个片段code ... 公共类Activiy_three扩展片段{ 私人GridView控件库; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 视图V = inflater.inflate(R.layout.activity_three_fragment,
集装箱,FALSE);
清单<项目>照片=新的ArrayList<项目>();
// TODO:发展为每个日期的照片
Images.add(新项目(图片1,R.drawable.penguins));
Images.add(新项目(图片1,R.drawable.pulips));
Images.add(新项目(图片1,R.drawable.lighthouse));
Images.add(新项目(图片1,R.drawable.koala));
Images.add(新项目(图片1,R.drawable.jellyfish));
Images.add(新项目(图片1,R.drawable.hydrangeas));
Images.add(新项目(图片1,R.drawable.chrysanthemum));
Images.add(新项目(图片1,R.drawable.home)); 画廊=(GridView控件)v.findViewById(R.id.gridview);
Global.photoAdapter =新PhotoAdapter(getActivity(),图像,FALSE);
gallery.setAdapter(Global.photoAdapter); gallery.setOnItemClickListener(新AdapterView.OnItemClickListener(){ 公共无效onItemClick(适配器视图<>母公司,观景,INT
位置,长的id){//意图I =新意图(getActivity(),FullImageActivity.class);
// i.putExtra(Global.Id,位置);
// startActivity(ⅰ); 片段片段=新FullImageActivity();
FragmentManager fragmentManager = getFragmentManager(); 捆绑ARGS =新包();
args.putInt(Global.Id,位置);
fragment.setArguments(参数); fragmentManager.beginTransaction()
.replace(R.id.frame_container,片段).commit();
}
});
返回伏;
}
}
您需要的片段添加到backstack
FragmentTransaction交易= getFragmentManager()调用BeginTransaction()。
transaction.replace(R.id.fragment_container,片段);
transaction.addToBackStack(NULL);
器transaction.commit();
您还可以使用 popBackStack()
从栈中弹出片段
http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack()
编辑:
您有什么
默认:
打破; FragmentTransaction交易= getFragmentManager()调用BeginTransaction()。
transaction.replace(R.id.frame_container,片段);
transaction.addToBackStack(NULL);
器transaction.commit();
}
应
私人无效displayView(INT位置){ 片段片段= NULL;
开关(位置){
情况下0:
片段=新Home_Activity();
打破;
情况1:
片段=新Activity_two();
打破;
案例2:
片段=新Activity_three();
打破;
案例3:
片段=新Activity_four();
打破;
情况4:
片段=新Activity_five();
打破;
情况5:
片段=新Activity_six();
打破;
情况6:
片段=新Activity_seven();
打破; 默认:
打破; } 如果(片段!= NULL){
FragmentTransaction交易= getFragmentManager()调用BeginTransaction()。
transaction.replace(R.id.frame_container,片段);
transaction.addToBackStack(NULL);
器transaction.commit(); DrawerList.setItemChecked(位置,真正的);
DrawerList.setSelection(位置);
的setTitle(MenuTitles [位置]);
DrawerLayout.closeDrawer(DrawerList);
}其他{ Log.e(MainActivity,出错创建片段);
}
}
I have developed an application that have one activity and in this activity there are add some fragment in drawer list item (side).So my issue is when I am open on any drawer fragment item and then pressed back button application going to close.So how to handle back event like 3 - 2 -1 when pressed back its open precious fragment.
Code of main activity
public class MainActivity extends FragmentActivity {
private DrawerLayout DrawerLayout;
private ListView DrawerList;
private ActionBarDrawerToggle DrawerToggle;
private CharSequence DrawerTitle;
private CharSequence Title;
private String[] MenuTitles;
private TypedArray MenuIcons;
private DrawerListAdapter adapter;
private ArrayList<DrawerItem> DrawerItems;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Title = DrawerTitle = getTitle();
MenuTitles = getResources().getStringArray(R.array.drawer_items);
MenuIcons = getResources().obtainTypedArray(R.array.drawer_icons);
DrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
DrawerList = (ListView) findViewById(R.id.list_slidermenu);
DrawerItems = new ArrayList<DrawerItem>();
DrawerItems.add(new DrawerItem(MenuTitles[0], MenuIcons.getResourceId(
0, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[1], MenuIcons.getResourceId(
1, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[2], MenuIcons.getResourceId(
2, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[3], MenuIcons.getResourceId(
3, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[4], MenuIcons.getResourceId(
4, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[5], MenuIcons.getResourceId(
5, -1)));
DrawerItems.add(new DrawerItem(MenuTitles[6], MenuIcons.getResourceId(
6, -1)));
MenuIcons.recycle();
DrawerList.setOnItemClickListener(new SlideMenuClickListener());
adapter = new DrawerListAdapter(getApplicationContext(), DrawerItems);
DrawerList.setAdapter(adapter);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
DrawerToggle = new ActionBarDrawerToggle(this, DrawerLayout,
R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(Title);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(DrawerTitle);
invalidateOptionsMenu();
}
};
DrawerLayout.setDrawerListener(DrawerToggle);
if (savedInstanceState == null) {
displayView(0);
}
}
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
displayView(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (DrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = DrawerLayout.isDrawerOpen(DrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@SuppressLint("NewApi")
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Home_Activity();
break;
case 1:
fragment = new Activity_two();
break;
case 2:
fragment = new Activity_three();
break;
case 3:
fragment = new Activity_four();
break;
case 4:
fragment = new Activity_five();
break;
case 5:
fragment = new Activity_six();
break;
case 6:
fragment = new Activity_seven();
break;
default:
break;
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
DrawerList.setItemChecked(position, true);
DrawerList.setSelection(position);
setTitle(MenuTitles[position]);
DrawerLayout.closeDrawer(DrawerList);
} else {
Log.e("MainActivity", "Error in creating fragment");
}
}
@SuppressLint("NewApi")
@Override
public void setTitle(CharSequence title) {
Title = title;
getActionBar().setTitle(Title);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
DrawerToggle.syncState();
}
one fragment code...
public class Activiy_three extends Fragment {
private GridView gallery;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_three_fragment,
container, false);
List<Item> Images = new ArrayList<Item>();
//todo : develop as per date photo
Images.add(new Item("Image 1", R.drawable.penguins));
Images.add(new Item("Image 1", R.drawable.pulips));
Images.add(new Item("Image 1", R.drawable.lighthouse));
Images.add(new Item("Image 1", R.drawable.koala));
Images.add(new Item("Image 1", R.drawable.jellyfish));
Images.add(new Item("Image 1", R.drawable.hydrangeas));
Images.add(new Item("Image 1", R.drawable.chrysanthemum));
Images.add(new Item("Image 1", R.drawable.home));
gallery = (GridView) v.findViewById(R.id.gridview);
Global.photoAdapter = new PhotoAdapter(getActivity(), Images,false);
gallery.setAdapter(Global.photoAdapter);
gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
// Intent i = new Intent(getActivity(), FullImageActivity.class);
// i.putExtra(Global.Id, position);
// startActivity(i);
Fragment fragment = new FullImageActivity();
FragmentManager fragmentManager = getFragmentManager();
Bundle args = new Bundle();
args.putInt(Global.Id, position);
fragment.setArguments(args);
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
}
});
return v;
}
}
You need add the fragment to the backstack
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
And you can use popBackStack()
to pop the fragment from the stack
http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack()
Edit:
What you have
default:
break;
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
Should be
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Home_Activity();
break;
case 1:
fragment = new Activity_two();
break;
case 2:
fragment = new Activity_three();
break;
case 3:
fragment = new Activity_four();
break;
case 4:
fragment = new Activity_five();
break;
case 5:
fragment = new Activity_six();
break;
case 6:
fragment = new Activity_seven();
break;
default:
break;
}
if (fragment != null) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
DrawerList.setItemChecked(position, true);
DrawerList.setSelection(position);
setTitle(MenuTitles[position]);
DrawerLayout.closeDrawer(DrawerList);
} else {
Log.e("MainActivity", "Error in creating fragment");
}
}
这篇关于如何处理回在android的活动抽屉名单片段事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!