Spectra
Spectra

Reputation: 67

Check user if selected a fragment item

I want to check user if he selected a fragment item [Home, Search, Post, notification, profile] if user selected any of them, I want to disable selecting same activity again prior to the selected fragment activity.

Also in 'Home' activity I have a recyclerview that has X items, if I click home activity again rather than disabling it, I want to move the adapter to view back the first item in recyclerview [Idea inspired from Instagram] when you click home it direct you to the top post.

I tried calling the Ids of the fragmentactivity but could not work

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;
                }
            };
}

So the idea behind this is not to let activities always restart or refreshed everytime i click a fragment activity that I am already in...

Upvotes: 0

Views: 128

Answers (3)

Milan Kundacina
Milan Kundacina

Reputation: 319

Override onNavigationItemReselected(...):

  • check if Home is already selected then do action you want.

That should solve both problems because when you reselect Search, Post or anything else you don't have that case covered in method that was overridden, so it just won't do anything.

Upvotes: 1

ismail alaoui
ismail alaoui

Reputation: 6073

Add an int veriable let's say int i = 0 ( by default home menu ) ...

              switch (item.getItemId()){
                    case R.id.nav_home:
                        if(i !=0){\\if i = 0 the user already in home so no need to load home fragment 
                        selectedfragment = new HomeFragment();
                        i = 0 ;
                        }       
                        break;
                    case R.id.nav_search:
                        if(i !=1){
                        selectedfragment = new SearchFragment();
                        i = 1 ;
                        }  
                        break;
                        }
                        .....
                        .....
                        .....

This way you gonna avoid recreating already visible fragment

Upvotes: 0

Thankgod  Richard
Thankgod Richard

Reputation: 517

As your selected fragment changes on each selection, You can do an if statement to check ur current fragment and do as u want like

switch(item.get()){
    case R.id.home:
        if(selectedFragmnet instance of HomeFragment){
             //Do your stuff here
         }else{
             selectedFragmnet = new HomeFragment();
         }
        break;



  ....
  ....
}

Upvotes: 0

Related Questions