如何处理回在android的活动抽屉名单片段事件 [英] how to handle back event in drawer list fragment in android activity

查看:251
本文介绍了如何处理回在android的活动抽屉名单片段事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经开发了有一个活动,这个活动也有增加抽屉列表项(侧面)的一些片段。所以我的问题是,当我在抽屉里的任何片段项目,然后打开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< D​​rawerItem> 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< D​​rawerItem>();        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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆