有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检查用户是否选择了片段项

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

此外,在“主页”活动中,我有一个包含X个项目的recyclerview,如果我再次单击主页活动而不是禁用它,我想移动适配器,以便在单击主页时查看recyclerview[灵感来源于Instagram]中的第一个项目,并将其引导到顶部帖子

我尝试调用碎片活动的ID,但无法工作

package com.capstone.araba;

import 安卓x.appcompat.app.AppCompatActivity;

import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.os.Bundle;
import 安卓.os.Handler;
import 安卓.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.安卓.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.Objects;

import 安卓x.fragment.app.Fragment;
import 安卓x.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. # 1 楼答案

    当你选择的片段在每次选择时发生变化时,你可以执行一个if语句来检查你当前的片段并做你想做的事情

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

    添加一个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;
                            }
                            .....
                            .....
                            .....
    

    这样你就可以避免重建已经可见的碎片

  3. # 3 楼答案

    覆盖onNavigationItemReselected(...)

    • 检查是否已选择Home,然后执行所需的操作

    这应该可以解决这两个问题,因为当您重新选择Search、Post或其他任何内容时,您并没有覆盖该案例的方法,所以它不会做任何事情