如何动态设置导航菜单?

时间:2020-03-20 08:32:26

标签: android

在android中,我想根据用户动态设置导航菜单。 一些用户有3个菜单,而另一个usr只有一个菜单,依此类推...。 如何动态设置导航菜单?导航菜单的设置写在xml文件中。我想在课程文件中设置导航菜单,并使用显示和隐藏菜单

const ButtonGroup = () => {
    const [buttons, setButtons] = useState([]);

    useEffect(() => {
        await getTests();
    }, []);

    async function getTests() {
        const url = 'http://127.0.0.1:100/getTestList';
        const resp = await fetch(url);
        const data = await resp.json();
        const buttonData = [];
        for (let pkg in data) {
            for (let cls in data[pkg]) {
                for (var i = 0; i < data[pkg][cls].length; i++) {
                    let m = data[pkg][cls][i];
                    buttonData.push({ value: cls, displayName: m });
                }
            }
        }
        setButtons(buttonData);
    }

    return (
        <div>
            <h4>Using.map()</h4>
            {buttons.map(button =>
                (
                    <button key={button.value} value={button.value}>{button.displayName}</button>
                )
            )}
        </div>
    );
}

export default ButtonGroup;
class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var navController: NavController
    private lateinit var drawerLayout: DrawerLayout

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupNavigationDrawer()
        setSupportActionBar(toolbar)

        navController = Navigation.findNavController(this,
            R.id.nav_fragment
        )
        appBarConfiguration = AppBarConfiguration
            .Builder(R.id.homeFragment, R.id.secondFragment)
            .setDrawerLayout(drawerLayout)
            .build()
        nav_fragment.navGraphViewModels<>()

        setupActionBarWithNavController(navController, appBarConfiguration)

        navigation_view.setupWithNavController(navController)

    }
    override fun onSupportNavigateUp(): Boolean {
        return findNavController(R.id.nav_fragment).navigateUp(appBarConfiguration)
                || super.onSupportNavigateUp()
    }

    private fun setupNavigationDrawer() {
        drawerLayout = (findViewById<DrawerLayout>(R.id.drawer_layout))
            .apply {
                setStatusBarBackground(R.color.colorPrimaryDark)
            }
    }
}

1 个答案:

答案 0 :(得分:0)

进行如下所示的自定义导航视图,并根据您的条件更改视图的可见性

 <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true" >

        <LinearLayout
            android:background="#FFFFFF"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

                        <RelativeLayout
                            android:id="@+id/layout_home"
                            android:foreground="?android:attr/selectableItemBackground"
                            android:orientation="horizontal"
                            android:layout_width="match_parent"
                            android:layout_height="@dimen/dimen_48dp">

                            <ImageView
                                android:id="@+id/nav_home"
                                app:srcCompat="@drawable/ic_home"
                                android:layout_width="@dimen/setting_icon"
                                android:layout_height="@dimen/setting_icon"
                                android:layout_marginLeft="@dimen/padding_double"
                                android:layout_marginRight="@dimen/padding_normal"
                                android:layout_centerVertical="true"
                                android:clickable="false"
                                android:focusable="false"
                                android:tint="@color/color_f85200"
                                android:layout_gravity="center_vertical"/>
                            <TextView
                                android:layout_centerVertical="true"
                                android:layout_toRightOf="@+id/nav_home"
                                android:text="@string/title_activity_home"
                                android:textSize="16sp"
                                android:clickable="false"
                                android:focusable="false"
                                android:fontFamily="@font/sarabun_medium"
                                android:layout_marginLeft="@dimen/padding_double"
                                android:layout_gravity="center_vertical"
                                android:textColor="@color/DrawerTextColor"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content" />
                        </RelativeLayout>
               </LinearLayout>
    </com.google.android.material.navigation.NavigationView>
相关问题