首页 > 解决方案 > 检查用户是否选择了片段项目

问题描述

如果用户选择了其中任何一个,我想检查用户是否选择了片段项目 [主页、搜索、发布、通知、个人资料],我想在选择的片段活动之前再次禁用选择相同的活动。

同样在“主页”活动中,我有一个包含 X 项的 recyclerview,如果我再次单击主页活动而不是禁用它,当您单击主页时,我想移动适配器以查看 recyclerview 中的第一个项目 [灵感来自 Instagram]它会将您引导至最高职位。

我尝试调用 fragmentactivity 的 ID,但无法正常工作

package com.capstone.araba;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.view.MenuItem;

import com.capstone.araba.Fragments.HomeFragment;
import com.capstone.araba.Fragments.NotificationFragment;
import com.capstone.araba.Fragments.ProfileFragment;
import com.capstone.araba.Fragments.SearchFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.Objects;

import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;


public class MainActivity extends AppCompatActivity {

    BottomNavigationView bottom_navigation;
    Fragment selectedfragment = null;
    private FirebaseUser user;
    private static MainActivity mInstance;



    public static synchronized MainActivity getInstance() {
        return mInstance;
    }

    public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
        ConnectivityReceiver.connectivityReceiverListener = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mInstance = this;

        bottom_navigation = findViewById(R.id.bottom_navigation);
        bottom_navigation.setOnNavigationItemSelectedListener(navigationItemSelectedListener);


        Bundle intent = getIntent().getExtras();
        if (intent != null){
            String publisher = intent.getString("publisherid");

            SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
            editor.putString("profileid", publisher);
            editor.apply();

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ProfileFragment()).commit();
        } else {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();
        }

    }


    private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {

                @Override
                public boolean onNavigationItemSelected( MenuItem item) {
                    user = FirebaseAuth.getInstance().getCurrentUser();

                    switch (item.getItemId()){
                        case R.id.nav_home:
                            selectedfragment = new HomeFragment();

                            break;
                        case R.id.nav_search:
                            selectedfragment = new SearchFragment();
                            break;
                        case R.id.nav_add:
                            selectedfragment = null;
                            startActivity(new Intent(MainActivity.this, PostActivity.class));
                            break;
                        case R.id.nav_heart:
                            selectedfragment = new NotificationFragment();
                            break;
                        case R.id.nav_profile:
                            if(user != null) {
                                SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
                                editor.putString("profileid", Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid());
                                editor.apply();
                                selectedfragment = new ProfileFragment();
                                break;
                            }
                            else{
                                Intent i = new Intent(MainActivity.this, GuestActivity.class);
                                startActivity(i);
                            }
                    }
                    if (selectedfragment != null) {
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                selectedfragment).commit();
                    }

                    return true;
                }
            };
}

所以这背后的想法是不要让活动总是在我每次点击我已经在其中的片段活动时重新启动或刷新......

标签: javaandroidandroid-fragments

解决方案


覆盖onNavigationItemReselected(...)

  • 检查是否已经选择了主页,然后执行您想要的操作。

这应该可以解决这两个问题,因为当您重新选择“搜索”、“发布”或其他任何内容时,您没有在被覆盖的方法中覆盖该案例,因此它不会做任何事情。


推荐阅读