Java 检查用户是否选择了片段项
我想检查用户是否选择了片段项[主页、搜索、发布、通知、配置文件]。如果用户选择了其中任何一项,我想在选择片段活动之前再次禁用选择相同的活动 此外,在“主页”活动中,我有一个包含X个项目的recyclerview,如果我再次单击主页活动而不是禁用它,我想移动适配器,以便在单击主页时查看recyclerview[灵感来源于Instagram]中的第一个项目,并将其引导到顶部帖子 我尝试调用碎片活动的ID,但无法工作Java 检查用户是否选择了片段项,java,android,android-fragments,Java,Android,Android Fragments,我想检查用户是否选择了片段项[主页、搜索、发布、通知、配置文件]。如果用户选择了其中任何一项,我想在选择片段活动之前再次禁用选择相同的活动 此外,在“主页”活动中,我有一个包含X个项目的recyclerview,如果我再次单击主页活动而不是禁用它,我想移动适配器,以便在单击主页时查看recyclerview[灵感来源于Instagram]中的第一个项目,并将其引导到顶部帖子 我尝试调用碎片活动的ID,但无法工作 package com.capstone.araba; import androi
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;
}
};
}
因此,这背后的想法是,不要让活动总是在每次我单击我已经在其中的片段活动时重新启动或刷新…当您所选的片段在每次选择中发生更改时,您可以执行if语句来检查您当前的片段,并按照您的意愿执行操作
switch(item.get()){
case R.id.home:
if(selectedFragmnet instance of HomeFragment){
//Do your stuff here
}else{
selectedFragmnet = new HomeFragment();
}
break;
....
....
}
添加一个
int
veriable,比如说inti=0
(默认主菜单)
这样可以避免重新创建已经可见的片段覆盖导航项重新选择(…):
- 检查是否已选择主页,然后执行所需操作
这应该可以解决这两个问题,因为当您重新选择Search、Post或其他任何内容时,您没有覆盖该方法的案例,所以它不会做任何事情。这里有什么问题吗?如何检查用户是否在x片段中,当他在那里的时候,如果他再次选择了那个碎片,它应该被禁用,因为他已经在那里了@AlexMamoSo这不是一个火基问题,对吧?@AlexMamo不,你是说标签吗?我添加了标签,因为我正在使用firebase,我很抱歉,我会编辑它。我使用了你的代码,它确实会禁用它,但如果我转到另一个片段活动并再次单击“主页”,它将被永久禁用,即使在添加代码后,我也尝试了其他活动,它没有反应。你说的“它没有反应”是什么意思?如果迟到了,我很抱歉,但谢谢兄弟/姐妹!!它很好用
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;
}
.....
.....
.....