Android ActionBarCompat-具有多个片段的导航抽屉

Android ActionBarCompat-具有多个片段的导航抽屉,android,android-fragments,android-actionbar,Android,Android Fragments,Android Actionbar,我是ActionBarCompat库的新手。我想开发一个包含多个片段的应用程序。这是我想做的 1.当用户从导航抽屉中选择片段时,如何打开该片段 2.如何设置显示启动布局的启动片段(例如,在Google plus应用程序中,首先显示新闻提要。当我们从侧菜单中选择profile项时,然后隐藏侧菜单/导航抽屉并显示配置文件布局) 目前我有副菜单和一个片段。 这是我过去一直遵循的教程-我假设旁边的菜单是指导航抽屉。你可以在下面的链接中找到答案 读 片段由活动托管。因此,在活动布局中需要一个容器 &l

我是ActionBarCompat库的新手。我想开发一个包含多个片段的应用程序。这是我想做的

1.当用户从导航抽屉中选择片段时,如何打开该片段

2.如何设置显示启动布局的启动片段(例如,在Google plus应用程序中,首先显示新闻提要。当我们从侧菜单中选择profile项时,然后隐藏侧菜单/导航抽屉并显示配置文件布局)

目前我有副菜单和一个片段。
这是我过去一直遵循的教程-

我假设旁边的菜单是指导航抽屉。你可以在下面的链接中找到答案

片段由活动托管。因此,在活动布局中需要一个容器

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout                  // container to which you add or replace fragments
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <ListView                     
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"/>

</android.support.v4.widget.DrawerLayout>
基于位置单击listitem时

 FragmentTransaction fragTran = getSupportFragmentManager()
                                       .beginTransaction();
 Fragment fragment3= new Fragment3();
 fragTran.replace(R.id.content_frame, fragment3);
 fragTran.commit(); 

我猜你们在菜单旁边指的是导航抽屉。你可以在下面的链接中找到答案

片段由活动托管。因此,在活动布局中需要一个容器

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout                  // container to which you add or replace fragments
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <ListView                     
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"/>

</android.support.v4.widget.DrawerLayout>
基于位置单击listitem时

 FragmentTransaction fragTran = getSupportFragmentManager()
                                       .beginTransaction();
 Fragment fragment3= new Fragment3();
 fragTran.replace(R.id.content_frame, fragment3);
 fragTran.commit(); 

如果您要使用滑出菜单,我建议您使用它,我在我的应用程序中使用它,它允许您在滑出菜单中放置任何您想要的内容,菜单只是一个框架布局,您可以在其中放置任何您想要的内容(Listview、GridView,甚至只是一张图片)

如果您要使用滑出菜单,我建议您使用它,我在我的应用程序中使用它,它允许您在滑出菜单中放置任何您想要的内容,该菜单只是一个框架布局,您可以在其中放置任何您想要的内容(Listview、GridView,甚至只是一张图片)

您好,请检查此代码

公共类MainActivity扩展了ActionBarActivity实现 麦克利克监听器{

DrawerLayout options_drawer;
FrameLayout main_frame;
ListView slider_list;
ActionBar action;
ActionBarDrawerToggle toggler;

BluetoothAdapter blue_adapter;

String options[] = { "Chat", "Device List", "Settings", "Emojis",
        "Terms&Conditions" };

Fragment f;

private static final int REQUEST_ENABLE_BT = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    setContentView(R.layout.activity_main);
    // setSupportProgressBarIndeterminateVisibility(true);
    action = getSupportActionBar();
    action.setHomeButtonEnabled(true);
    action.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    options_drawer = (DrawerLayout) findViewById(R.id.drawer);
    main_frame = (FrameLayout) findViewById(R.id.main_frame);
    slider_list = (ListView) findViewById(R.id.slider_list);

    blue_adapter = BluetoothAdapter.getDefaultAdapter();
    if (blue_adapter == null) {
        Toast.makeText(getApplicationContext(),
                "NO BLUETOOTH DEVICE FOUND", Toast.LENGTH_LONG).show();
        finish();
    }

    ArrayAdapter<String> al = new ArrayAdapter<String>(
            getApplicationContext(), R.layout.option_text, options);
    slider_list.setAdapter(al);
    slider_list.setOnItemClickListener(this);

    /*
     * toggler=new ActionBarDrawerToggle(MainActivity.this,
     * options_drawer,R.
     * drawable.ic_launcher,R.string.app_name,R.string.app_name){
     * 
     * @Override public void onDrawerOpened(View drawerView) { // TODO
     * Auto-generated method stub super.onDrawerOpened(drawerView);
     * options_drawer.openDrawer(slider_list); }
     * 
     * };
     */
    // options_drawer.setDrawerListener(toggler);

    if (savedInstanceState == null) {

        f = new chat_fragment();
        fragmentTransition(f);

    }

}

@Override
public void onStart() {
    super.onStart();

    // If BT is not on, request that it be enabled.
    // setupChat() will then be called during onActivityResult
    if (!blue_adapter.isEnabled()) {
        Intent enableIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        // Otherwise, setup the chat session
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    if (item.getItemId() == android.R.id.home) {

        // If the drawer is open, close it; vice versa
        if (options_drawer.isDrawerOpen(slider_list)) {
            options_drawer.closeDrawer(slider_list);
        } else {
            options_drawer.openDrawer(slider_list);
        }
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
        long arg3) {
    // TODO Auto-generated method stub

    options_drawer.closeDrawer(slider_list);

    switch (position) {

    case 0:
        f = new chat_fragment();
        fragmentTransition(f);
        break;

    case 1:

        f = new device_list_fragment();
        fragmentTransition(f);
        break;
    }


}

private void fragmentTransition(Fragment f2) {
    // TODO Auto-generated method stub

    FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
    fx.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fx.replace(R.id.main_frame, f2).commit();

}
抽屉布局选项\u抽屉;
框架布局主框架;
列表视图滑块(u列表),;
行动吧行动;
ActionBarDrawerToggle触发器;
蓝牙适配器;
字符串选项[]={“聊天”、“设备列表”、“设置”、“表情”,
“条款与条件”};
片段f;
私有静态最终整数请求_ENABLE_BT=3;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//supportRequestWindowFeature(窗口功能\u不确定\u进度);
setContentView(R.layout.activity_main);
//SetSupportProgressBarInDeterminateVibility(真);
action=getSupportActionBar();
action.setHomeButtonEnabled(true);
action.setNavigationMode(ActionBar.NAVIGATION_模式_标准);
选项_drawer=(DrawerLayout)findviewbyd(R.id.drawer);
main_frame=(FrameLayout)findviewbyd(R.id.main_frame);
slider\u list=(ListView)findViewById(R.id.slider\u list);
blue_adapter=BluetoothAdapter.getDefaultAdapter();
if(蓝色_适配器==null){
Toast.makeText(getApplicationContext(),
“未找到蓝牙设备”,Toast.LENGTH_LONG.show();
完成();
}
ArrayAdapter al=新的ArrayAdapter(
getApplicationContext(),R.layout.option_text,options);
滑块列表。设置适配器(al);
slider_list.setOnItemClickListener(此);
/*
*toggler=new ActionBarDrawerToggle(MainActivity.this,
*右抽屉。
*drawable.ic_启动器,R.string.app_名称,R.string.app_名称){
* 
*@Override public void onDrawerOpened(视图抽屉视图){//TODO
*自动生成方法存根super.onDrawerOpened(抽屉视图);
*选项_drawer.openDrawer(滑块列表);}
* 
* };
*/
//选项_drawer.setDrawerListener(切换器);
如果(savedInstanceState==null){
f=新聊天_片段();
碎片化转变(f);
}
}
@凌驾
public void onStart(){
super.onStart();
//如果BT未打开,请请求启用它。
//然后在onActivityResult期间调用setupChat()
如果(!blue_adapter.isEnabled()){
意图启用意图=新意图(
BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(启用意图、请求和启用);
//否则,请设置聊天会话
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//TODO自动生成的方法存根
if(item.getItemId()==android.R.id.home){
//如果抽屉打开,请将其关闭;反之亦然
if(选项\抽屉isDrawerOpen(滑块\列表)){
选项\u drawer.closeDrawer(滑块\u列表);
}否则{
选项\u drawer.openDrawer(滑块\u列表);
}
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
选项\u drawer.closeDrawer(滑块\u列表);
开关(位置){
案例0:
f=新聊天_片段();
碎片化转变(f);
打破
案例1:
f=新设备\列表\片段();
碎片化转变(f);
打破
}
}
私有void片段转换(片段f2){
//TODO自动生成的方法存根
FragmentTransaction fx=getSupportFragmentManager().beginTransaction();
fx.setTransition(FragmentTransaction.Transition\u FRAGMENT\u OPEN);
fx.replace(R.id.main_frame,f2).commit();
}
}

并且XML文件是

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<FrameLayout
    android:id="@+id/main_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>

<ListView
    android:id="@+id/slider_list"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#ffffff" >
</ListView>

您好,请检查此代码

公共类MainActivity扩展了ActionBarActivity实现 麦克利克监听器{

DrawerLayout options_drawer;
FrameLayout main_frame;
ListView slider_list;
ActionBar action;
ActionBarDrawerToggle toggler;

BluetoothAdapter blue_adapter;

String options[] = { "Chat", "Device List", "Settings", "Emojis",
        "Terms&Conditions" };

Fragment f;

private static final int REQUEST_ENABLE_BT = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    setContentView(R.layout.activity_main);
    // setSupportProgressBarIndeterminateVisibility(true);
    action = getSupportActionBar();
    action.setHomeButtonEnabled(true);
    action.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    options_drawer = (DrawerLayout) findViewById(R.id.drawer);
    main_frame = (FrameLayout) findViewById(R.id.main_frame);
    slider_list = (ListView) findViewById(R.id.slider_list);

    blue_adapter = BluetoothAdapter.getDefaultAdapter();
    if (blue_adapter == null) {
        Toast.makeText(getApplicationContext(),
                "NO BLUETOOTH DEVICE FOUND", Toast.LENGTH_LONG).show();
        finish();
    }

    ArrayAdapter<String> al = new ArrayAdapter<String>(
            getApplicationContext(), R.layout.option_text, options);
    slider_list.setAdapter(al);
    slider_list.setOnItemClickListener(this);

    /*
     * toggler=new ActionBarDrawerToggle(MainActivity.this,
     * options_drawer,R.
     * drawable.ic_launcher,R.string.app_name,R.string.app_name){
     * 
     * @Override public void onDrawerOpened(View drawerView) { // TODO
     * Auto-generated method stub super.onDrawerOpened(drawerView);
     * options_drawer.openDrawer(slider_list); }
     * 
     * };
     */
    // options_drawer.setDrawerListener(toggler);

    if (savedInstanceState == null) {

        f = new chat_fragment();
        fragmentTransition(f);

    }

}

@Override
public void onStart() {
    super.onStart();

    // If BT is not on, request that it be enabled.
    // setupChat() will then be called during onActivityResult
    if (!blue_adapter.isEnabled()) {
        Intent enableIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        // Otherwise, setup the chat session
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    if (item.getItemId() == android.R.id.home) {

        // If the drawer is open, close it; vice versa
        if (options_drawer.isDrawerOpen(slider_list)) {
            options_drawer.closeDrawer(slider_list);
        } else {
            options_drawer.openDrawer(slider_list);
        }
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
        long arg3) {
    // TODO Auto-generated method stub

    options_drawer.closeDrawer(slider_list);

    switch (position) {

    case 0:
        f = new chat_fragment();
        fragmentTransition(f);
        break;

    case 1:

        f = new device_list_fragment();
        fragmentTransition(f);
        break;
    }


}

private void fragmentTransition(Fragment f2) {
    // TODO Auto-generated method stub

    FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
    fx.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fx.replace(R.id.main_frame, f2).commit();

}
抽屉布局选项\u抽屉;
框架布局主框架;
列表视图滑块(u列表),;
行动吧行动;
ActionBarDrawerToggle触发器;
蓝牙适配器;
字符串选项[]={“聊天”、“设备列表”、“设置”、“表情”,
“条款与条件”};
片段f;
私有静态最终整数请求_ENABLE_BT=3;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//supportRequestWindowFeature(Window.FEATURE\u不确定\u程序