java - 检查用户是否选择了片段项目
问题描述
如果用户选择了其中任何一个,我想检查用户是否选择了片段项目 [主页、搜索、发布、通知、个人资料],我想在选择的片段活动之前再次禁用选择相同的活动。
同样在“主页”活动中,我有一个包含 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;
}
};
}
所以这背后的想法是不要让活动总是在我每次点击我已经在其中的片段活动时重新启动或刷新......
解决方案
覆盖onNavigationItemReselected(...)
:
- 检查是否已经选择了主页,然后执行您想要的操作。
这应该可以解决这两个问题,因为当您重新选择“搜索”、“发布”或其他任何内容时,您没有在被覆盖的方法中覆盖该案例,因此它不会做任何事情。
推荐阅读
- postgresql - Postgresql 表不显示在 Navicat 数据库 ui 管理器上
- r - ggplotly 对图例中的元素进行分组失败
- php - dompdf 卡纳达语字符编码未在 codeigniter php 中呈现
- sql - 如何按不同表中三列的总和排序?
- asp.net - 如何强制用户在显示网站上的任何内容之前从下拉列表中选择某些内容并将该值存储为“全局”值?
- c# - 当我刷新一个实例时,是否会刷新每个 PrintQueue 实例(同一台打印机的)?
- angular - 处理大数据并在动态表中显示
- python - Python while循环返回第N个字母
- refresh - 使用“自动刷新”Chrome 扩展程序自动刷新 Tableau 在线仪表板
- javascript - 在firebase中更改规则时出错