日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了如何不間斷地顯示我的導航欄內容?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我從頭開始構建了一個可定制的導航抽屜(沒有使用Android Studio提供的默認抽屜)。在我的天氣應用程序的導航欄菜單https://i.stack.imgur.com/SIjdx.jpg中,每當我選擇菜單上的一個選項(比如設置)時,它會顯示選項的內容以及底部的導航視圖和我的活動的工具欄內容,其中包括導航漢堡圖標、編輯文本和搜索按鈕(托管我的3個片段的活動),這會破壞應用程序,使其看起來非常難看,即https://i.stack.imgur.com/gxj5n.jpg(從該屏幕截圖看,如果實現良好,整個內容應該是空的)。其他欄菜單選項的情況相同。所有我想要的是一個空白的空間來工作,我想要的應用程序只顯示導航欄內容,沒有睡覺。示例;https://i.stack.imgur.com/3Jtga.png我應該怎么做?

導航菜單的視圖由以下代碼控制(在第185行):

@Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.settings_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Settings()).commit();
                break;
            case R.id.ads_upgrade_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Upgrade()).commit();
                break;
            case R.id.privacy_policy_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Privacy_Policy()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START);

        return true;
    }

表示我當前正在活動上使用片段的容器視圖來顯示導航菜單內容,而我知道這些內容肯定是錯誤的,那么我應該在Replace中使用什么呢?(&p>"Fragment"There)表示我當前正在活動上使用片段的容器視圖來顯示我知道是錯誤的導航菜單內容。我缺乏豐富的經驗,因為這是我第一次開發應用程序,我不知疲倦地獨自花了3個小時試圖解決這個問題,但最終失敗了。

這是我的活動代碼:

public class HomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;
    // Last update time, click sound, search button, search panel.
    TextView timeField;
    MediaPlayer player;
    ImageView Search;
    EditText textfield;
    // For scheduling background image change(using constraint layout, start counting from dubai, down to statue of liberty.
    ConstraintLayout constraintLayout;
    public static int count = 0;
    int[] drawable = new int[]{R.drawable.dubai, R.drawable.norway, R.drawable.eiffel_tower, R.drawable.hong_kong, R.drawable.statue_of_liberty,
            R.drawable.beijing, R.drawable.chicago, R.drawable.colombia, R.drawable.vienna,R.drawable.tokyo};
    Timer _t;

    private WeatherDataViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        // use home activity layout.

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Allow activity to make use of the toolbar

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

        viewModel = new ViewModelProvider(this).get(WeatherDataViewModel.class);

        // Trigger action to open & close navigation drawer
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar
                , R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        timeField = findViewById(R.id.textView9);
        Search = findViewById(R.id.imageView4);
        textfield = findViewById(R.id.textfield);
        //  find the id's of specific variables.

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
        // host 3 fragments along with bottom navigation.
        final NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
        assert navHostFragment != null;
        final NavController navController = navHostFragment.getNavController();
        NavigationUI.setupWithNavController(bottomNavigationView, navController);

        // Make hourly & daily tab unusable
        bottomNavigationView.setOnNavigationItemSelectedListener(item -> {

            if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack();
            }
            return false;
        });

        navController.addOnDestinationChangedListener((controller, destination, arguments) -> navController.popBackStack(destination.getId(), false));

        // For scheduling background image change
        constraintLayout = findViewById(R.id.layout);
        constraintLayout.setBackgroundResource(R.drawable.dubai);
        _t = new Timer();
        _t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // run on ui thread
                runOnUiThread(() -> {
                    if (count < drawable.length) {

                        constraintLayout.setBackgroundResource(drawable[count]);
                        count = (count + 1) % drawable.length;
                    }
                });
            }
        }, 5000, 5000);

        Search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // make click sound when search button is clicked.
                player = MediaPlayer.create(HomeActivity.this, R.raw.click);
                player.start();

                getWeatherData(textfield.getText().toString().trim());
                // make use of some fragment's data

                Fragment currentFragment = navHostFragment.getChildFragmentManager().getFragments().get(0);
                if (currentFragment instanceof FirstFragment) {
                    FirstFragment firstFragment = (FirstFragment) currentFragment;
                    firstFragment.getWeatherData(textfield.getText().toString().trim());
                } else if (currentFragment instanceof SecondFragment) {
                    SecondFragment secondFragment = (SecondFragment) currentFragment;
                    secondFragment.getWeatherData(textfield.getText().toString().trim());
                } else if (currentFragment instanceof ThirdFragment) {
                    ThirdFragment thirdFragment = (ThirdFragment) currentFragment;
                    thirdFragment.getWeatherData(textfield.getText().toString().trim());
                }
            }

            private void getWeatherData(String name) {

                ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);

                Call<Example> call = apiInterface.getWeatherData(name);

                call.enqueue(new Callback<Example>() {
                    @Override
                    public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {

                        try {
                            assert response.body() != null;
                            timeField.setVisibility(View.VISIBLE);
                            timeField.setText("First Updated:" + " " + response.body().getDt());
                        } catch (Exception e) {
                            timeField.setVisibility(View.GONE);
                            timeField.setText("First Updated: Unknown");
                            Log.e("TAG", "No City found");
                            Toast.makeText(HomeActivity.this, "No City found", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onFailure(@NotNull Call<Example> call, @NotNull Throwable t) {
                        t.printStackTrace();
                    }

                });
            }

        });
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.settings_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Settings()).commit();
                break;
            case R.id.ads_upgrade_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Upgrade()).commit();
                break;
            case R.id.privacy_policy_id:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment,
                        new Privacy_Policy()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START);

        return true;
    }

    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
            // Open/close drawer animation
        }
    }
}

如果您需要任何其他代碼來調查此問題,請讓我知道。我只是想避免張貼太多

編輯

我的舊底標簽導航圖:

<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/my_nav"
    app:startDestination="@id/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.viz.lightweatherforecast.FirstFragment"
        android:label="fragment_first"
        tools:layout="@layout/fragment_first" />
    <fragment
        android:id="@+id/secondFragment"
        android:name="com.viz.lightpreciseweatherforecast.SecondFragment"
        android:label="fragment_second"
        tools:layout="@layout/fragment_second" />
    <fragment
        android:id="@+id/thirdFragment"
        android:name="com.viz.lightpreciseweatherforecast.ThirdFragment"
        android:label="fragment_third"
        tools:layout="@layout/fragment_third" />
</navigation>

我的新導航條形圖:

<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/bar_nav"
    app:startDestination="@id/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.viz.lightweatherforecast.FirstFragment"
        android:label="fragment_first"
        tools:layout="@layout/fragment_first" />
    <fragment
        android:id="@+id/settings_id"
        android:name="com.viz.lightweatherforecast.Settings"
        android:label="@string/settings"
        tools:layout="@layout/settings" />
    <fragment
        android:id="@+id/ads_upgrade_id"
        android:name="com.viz.lightweatherforecast.Upgrade"
        android:label="@string/upgrade_to_remove_ads"
        tools:layout="@layout/upgrade" />
    <fragment
        android:id="@+id/privacy_policy_id"
        android:name="com.viz.lightweatherforecast.Privacy_Policy"
        android:label="@string/privacy_policy"
        tools:layout="@layout/privacy_policy"/>

</navigation>

推薦答案

您使用的是導航體系結構組件,因此navController應該是控制片段事務的組件,您使用BottomNavigationView進行的操作是正確的。

但在navDrawer內,您正在通過supportFragmentManager執行事務,而應通過navController完成,因為兩者處理導航的方式不同。

每當我在菜單上選擇一個選項(比如設置)時,它都會顯示該選項的內容以及底部導航視圖

這是因為BottomNavView是活動的一部分,您需要將其移動到片段中;這需要更改應用程序的導航設計;為此,請如下所示更改應用程序導航:

主導航:

<navigation
 ..... >

    <fragment
        android:name="......HomeFragment"/>

    <fragment
        android:name="......SettingFragment"/>

    <fragment
        android:name="......AdsUpgradeFragment"/>
        
    <fragment
        android:name="......PrivacyPolicyFragment"/>        
        
        
</navigation>

HomeFragment是應該保存BottomNaviagtionView而不是活動的片段;當您導航到SettingFragment時,navConroll將替換navHostFragment中的整個片段,因此BottomNaviagtionView將不會顯示。

由導航漢堡組成的我的活動的工具欄內容
圖標、編輯文本和搜索按鈕(托管My 3的活動
碎片),這會破壞應用程序,使其看起來非常難看

BottomNaviagtionView不同,您不能對用作supportActionBar的工具欄執行此操作,因為為了更改其外觀而多次設置supportActionBar將復制它;因此您必須接受單個工具欄;但是,您可以在目標更改時隱藏/顯示包含搜索按鈕和EditText的布局:

navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
    LinearLayout searchBar = findViewById(R.id.searchbar); // change searchbar according to the layout id that holds the search button and the EditText
    if (destination.getId() == R.id.nav_home) {
        searchBar.setVisibility(View.VISIBLE);

    } else {
        searchBar.setVisibility(View.GONE);
    }

});

是的,他們當前在單擊”上一步”時退出應用程序

要在任何時候按下任何片段中的底部后退按鈕,請在這些片段的onCreateView()內使用OnBackPressedDispatcher()(在您的示例中為SettingFragment、PrivacyPolicyFragment和&amp;AdsUpgradeFragment):

并確保appBarConfiguration沒有引用這些片段,以便可以顯示”向上”按鈕而不是漢堡。

requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            // Exit the app when back is pressed
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                requireActivity().finishAndRemoveTask();
            else requireActivity().finish();
        }
    });

另外,請確保您的設置DrawerLayoutnavViewnavController中設置為:

NavigationView navView = findViewById(....);

appBarConfiguration = new AppBarConfiguration.Builder(
        R.id.nav_home) // remove up button from all these fragments >> Keep the up/back button in R.id.settings_id, R.id.settings_id, ads_upgrade_id, privacy_policy_id
        .setOpenableLayout(drawer)
        .build();

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);

并在navDrawer中默認隱藏Home片段:

navView.getMenu().findItem(R.id.nav_home).setVisible(false); // adjust R.id.nav_home to yours

更新

我目前只有一個導航圖。FirstFragment表示
今天,第二小時和第三小時
我正在使用的是我的其他天氣選項卡,但您建議的那個
是在導航欄菜單上,我應該把你的換成我的,還是
是否為您的建議創建新建議?

您應該使用兩個navGraphs,第一個是我建議的主導航;第二個是您已經使用的BottomNavigationView導航;這是因為我們將BottomNavigationView從活動布局轉移到了主/主頁片段布局;和it’ recommended the BottomNavigationView should have a separate navGraph;

因此,您現在需要兩個FragmentContainerView;第一個在引用此答案中提供的navGraph的活動布局中,第二個在引用BottomNavigationView的原始navGraph的主頁片段布局中。

示例:

這篇關于如何不間斷地顯示我的導航欄內容?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:不間斷 導航 顯示 欄內
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定