Проверьте пользователя, если выбран элемент фрагмента - PullRequest
0 голосов
/ 28 октября 2019

Я хочу проверить, выбрал ли он элемент фрагмента [Домой, Поиск, Публикация, уведомление, профиль], если пользователь выбрал какой-либо из них, я хочу отключить выбор этой же операции еще раз до активности выбранного фрагмента.

Также в «Домашнем» упражнении у меня есть видоискатель, в котором есть элементы X, и если я снова щелкаю домашнее задание, а не отключаю его, я хочу переместить адаптер, чтобы просмотреть первый элемент в представлении вторичного хранилища [Идея, вдохновленная Instagram], когдаВы щелкаете домой, и вы попадаете в верхнюю запись.

Я пытался назвать идентификаторы фрагментации, но не мог работать

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

Так что идея заключается в том, чтобы не позволить действиям всегда перезапускатьсяили обновляется каждый раз, когда я нажимаю на фрагмент активности, в которой я уже ...

Ответы [ 3 ]

1 голос
/ 28 октября 2019

Переопределить onNavigationItemReselected(...):

  • проверить, если Дом уже выбран, затем выполнить действие, которое вы хотите.

Это должно решить обе проблемы, потому что при повторном выборе Поиск, Постили что-то еще, у вас нет этого случая в методе, который был переопределен, так что он просто ничего не сделает.

0 голосов
/ 28 октября 2019

Добавить int проверяемый, скажем, int i = 0 (по умолчанию главное меню) ...

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

Таким образом, вы избежите воссоздания уже видимого фрагмента

0 голосов
/ 28 октября 2019

Поскольку выбранный вами фрагмент изменяется при каждом выделении, вы можете выполнить оператор if, чтобы проверить текущий фрагмент и сделать так, как вам нужно:

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



  ....
  ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...