Я пытаюсь скрыть определенные элементы из моей пользовательской панели инструментов, которую я развернул в MainActivity (это единственное действие в моем приложении).
Соответственно, BotomNavigation имеетбыл реализован, который обрабатывает 3 фрагмента, а именно Home, Records и Statistics .
Основной toolbar.xml составлен следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:elevation="4dp">
<TextView
android:id="@+id/toolbarTitle"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
<ImageView
android:id="@+id/profileImage"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/ic_account_circle_white_50dp"/>
Как вы можете ясно видеть, он имеет
TextView , который динамически отображает и центрирует имя фрагмента, на котором находится текущий пользователь, и
и ImageView , который показывает изображение аутентифицированного пользователя, где src является просто заполнителем, если у пользователя нет изображения профиля.
Не все работает, как ожидалось, с помощью следующего MainActivity.java :
public class MainActivity extends AppCompatActivity {
private TextView mTitle;
private String mUsername, mEmail;
private Uri mProfileImage;
private ImageView mProfileImageView;
private android.support.v7.widget.Toolbar mToolbar;
private static final String TAG = "BottomNavigation";
private BottomNavigationView.OnNavigationItemSelectedListener navListener;
public BottomNavigation() {
navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment;
switch (item.getItemId()) {
case R.id.nav_home:
mTitle.setText("Home");
mToolbar.getMenu().findItem(R.id.profileImage).setVisible(false);
fragment = new HomeFragment();
loadFragment(fragment);
break;
case R.id.nav_records:
mTitle.setText("Records");
mToolbar.getMenu().findItem(R.id.profileImage).setVisible(false);
fragment = new RecordsFragment();
loadFragment(fragment);
break;
case R.id.nav_stats:
mTitle.setText("Statistics");
fragment = new StatisticsFragment();
loadFragment(fragment);
Glide.with(getApplicationContext()).load(mProfileImage).into(mProfileImageView);
break;
}
return true;
}
};
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bottom_naviation);
//replacing the default actionbar with custom toolbar
mToolbar = findViewById(R.id.tool_bar);
setSupportActionBar(mToolbar);
mTitle = mToolbar.findViewById(R.id.toolbarTitle);
//disabling the output of the appname on the toolbar
getSupportActionBar().setDisplayShowTitleEnabled(false);
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
bottomNav.setOnNavigationItemSelectedListener(navListener);
//load the Home fragment by default
loadFragment(new HomeFragment());
mTitle.setText("Home");
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
mProfileImage = currentUser.getPhotoUrl();
mProfileImageView = mToolbar.findViewById(R.id.profileImage);
}
private void loadFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, fragment);
transaction.commit();
}
}
Я пытаюсь реализовать скрытие ImageView в Home и Recordфрагмент но Статистика.
Для этогоЯ использовал следующее в соответствующих операторах case:
mToolbar.getMenu().findItem(R.id.profileImage).setVisible(false);
Однако, по какой-то причине ImageView остается как есть.Что интересно:
1. , что изображение заполнителя будет оставаться до тех пор, пока я не перейду к фрагменту статистики и не извлечу изображение.
2. после извлечения изображение остается на панели инструментов, даже если оно выходит из статистики, возможно, оно не скрывается с самого начала.
3. еслиЯ поворачиваюсь в альбомную ориентацию, извлеченное изображение стирается, и мне снова предоставляют заполнитель.
Я также пытался скрыть видимость, установив видимость, которая была добавлена в самом ImageView, но безрезультатно.
mProfileImageView.setVisibility(View.GONE);
Как я могу на самом деле реализовывать правильную логику, если я внедряю панель инструментов в каждый фрагмент, что, безусловно, не является здоровой практикой и наносит ущерб назначению модульных фрагментов?
Ниже приведены некоторые скриншоты для лучшего понимания:
ImageView не скрывается, показывает заполнитель
Видно даже во фрагменте записей
заполнитель заменен на изображение пользователя (получено с помощью FirebaseUI Auth)
при повороте в горизонтальное положение переключается назадФрагмент «Домой» и заполнитель заменяется извлеченным изображением
, как только я переключаюсь на статистику, просмотр изображения заменяется предполагаемым изображением