导航菜单和在android中的选择性片段上添加按钮

Posted

技术标签:

【中文标题】导航菜单和在android中的选择性片段上添加按钮【英文标题】:Navigation menu and add button on selective fragments in android 【发布时间】:2020-05-08 06:28:33 【问题描述】:

我需要你的帮助来理解 android 中菜单的概念。 我在 android 中使用导航菜单(栏)并将其加载到 MainActivity 并放置三个不同的片段。

在应用启动时,导航菜单打开,默认片段也如下所述加载。

这里一切正常,但是当我单击第三个菜单选项(信用卡)然后在该片段中打开一个片段时,我正在使用 ListView,如下所述:

现在我想要栏上的添加按钮,在这里您可以在栏下方看到它。 我怎样才能做到这一点?请帮帮我。在这里,我想要左侧导航的汉堡图标,并在同一栏的右侧添加图标/按钮。

注意:我尝试在 DrawerLayout 内使用的工具栏上添加按钮,但此按钮出现在所有片段上。

这里是activity_main.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.ac xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity"
    android:id="@+id/drawer_layout"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:layout_
            android:layout_
            android:background="@color/colorPrimary"
            android:id="@+id/toolbar"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            >
        </android.support.v7.widget.Toolbar>

        <FrameLayout
            android:layout_
            android:layout_
            android:id="@+id/fragement_container"/>

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:layout_
        android:layout_
        android:layout_gravity="start"
        android:id="@+id/nav_view"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_menu" >
    </android.support.design.widget.NavigationView>

</android.support.v4.widget.ac>

MainActivity.java

package com.mas.mas;

import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener 

    private DrawerLayout drawerLayout;

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

        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawerLayout = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.nagivation_drawer_open, R.string.nagivation_drawer_close);
        drawerLayout.addDrawerListener(drawerToggle);
        drawerToggle.syncState();

        if (savedInstanceState == null) 
            getSupportFragmentManager().beginTransaction().replace(R.id.fragement_container, new TransactionsListFragment()).commit();
            setTitle("Transactions");
            navigationView.setCheckedItem(R.id.transactions);
        
    

    @Override
    public void onBackPressed() 
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) 
            drawerLayout.closeDrawer(GravityCompat.START);
         else 
            super.onBackPressed();
        
    

    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) 
        switch (menuItem.getItemId()) 
            case R.id.transactions:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragement_container, new TransactionsListFragment()).commit();
                setTitle("Email");
                break;
            case R.id.banks:
//                getSupportFragmentManager().beginTransaction().replace(R.id.fragement_container, new MessageFragement()).commit();
                setTitle("Banks");
                break;
            case R.id.cards:
                setTitle("Cards");
                getSupportFragmentManager().beginTransaction().replace(R.id.fragement_container, new CardsFragment()).commit();
                break;
        
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    

谢谢。

【问题讨论】:

在 DrawerLayout 的工具栏中添加按钮,并在 onNavigationItemSelected 中设置按钮的可见性。 menu添加到信用卡片段 @Rajnishsuryavanshi 好的,但此按钮事件仅在主要活动类中有效,如何在单击同一按钮时打开 addBank、addCard 片段。 【参考方案1】:

在mainActivity的工具栏中添加按钮

<androidx.appcompat.widget.Toolbar

        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay">
        <RelativeLayout
            android:layout_
            android:layout_>

        <ImageView

            android:id="@+id/adimage"
            android:layout_marginBottom="@dimen/padd_10"
            android:layout_marginTop="@dimen/padd_10"
            android:layout_alignParentRight="true"
            android:layout_
            android:layout_
            android:src="@drawable/ad"></ImageView>
        </RelativeLayout>

然后在 mainActivity.java 中将它用于 onClick Listner

Toolbar toolbar = findViewById(R.id.toolbar);
adsImageView=toolbar.findViewById(R.id.adimage);

adsImageView.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 


希望对你有帮助

【讨论】:

我之前试过这个,主要问题是按钮监听器只在 MainActivity 类中工作,我如何在点击同一个按钮时打开不同的添加页面。就像我想在卡片页面上打开 AddCard 并单击添加按钮和 AddBanks 当我将在银行按钮上并单击添加按钮时一样。

以上是关于导航菜单和在android中的选择性片段上添加按钮的主要内容,如果未能解决你的问题,请参考以下文章

Android - 导航抽屉 - 与动态菜单项重叠的片段

选择导航菜单项时不会替换上一个片段

片段中的 Android 谷歌地图

热门从另一个片段导航到主页片段

导航架构组件 - 导航抽屉

从android eclipse中的片段刷新或更新listadapter