Фрагменты приложений Android, отображающие контент только при переключении темы (освещение/режим)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Фрагменты приложений Android, отображающие контент только при переключении темы (освещение/режим)

Сообщение Anonymous »

Я работаю над приложением для Android и потратил много времени на реализацию NavController с помощью BottomNavigationView. Он работает правильно, я могу переключаться между различными кнопками, но содержимое пусто. Он отображается только тогда, когда я переключаю светлый режим в темный режим (на моем устройстве, а не в приложении) или наоборот, чтобы контент начал отображаться.
Моя домашняя активность имеет 3 фрагмента, которые она вызывает. домашний фрагмент, фрагмент поиска и фрагмент профиля.
Панель навигации работает правильно, и я могу переключаться между кнопками, но содержимое отображается только при переключении текущей темы моего устройства.
Это не проблема цветов. Я попробовал изменить textColor, но это не сработало. Это также не проблема в файле themes.xml.
Предварительный просмотр моего домашнего файла Activity.xml показывает данные домашнего фрагмента, отображаемые в нем, поэтому я думаю, что где-то программно текст пропал, и я просто понятия не имею, где.
HomeActivity.java
public class Home extends AppCompatActivity {

TextView tvSong, tvArtist;
ImageView ivCover, ivPlayButton;
ActivityHomeBinding binding;
MaterialCardView cardView;
BottomNavigationView bottomNavigationView;
NavController navController;

private static final int ANIMATION_DURATION = 150; // Duration in milliseconds

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
binding = ActivityHomeBinding.inflate(getLayoutInflater());
setContentView(R.layout.activity_home);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.homePage), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});

tvSong = findViewById(R.id.tvSong);
tvArtist = findViewById(R.id.tvArtist);
ivPlayButton = findViewById(R.id.ivPlay);
cardView = findViewById(R.id.mcvCurrentSong);
bottomNavigationView = findViewById(R.id.bnBotNav);

final MutableLiveData[] musicPlaying = new MutableLiveData[]{new MutableLiveData()};
musicPlaying[0].setValue(true);

musicPlaying[0].observe(this, aBoolean -> {
if (Boolean.TRUE.equals(aBoolean)) {
cardView.setVisibility(View.VISIBLE);
cardView.setAlpha(0f);
cardView.animate()
.alpha(1f)
.setDuration(ANIMATION_DURATION)
.setListener(null);
ivPlayButton.setImageResource(R.drawable.ic_pause);
} else {
cardView.animate()
.alpha(0f)
.setDuration(ANIMATION_DURATION)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
cardView.setVisibility(View.GONE);
}
});
ivPlayButton.setImageResource(R.drawable.ic_play);
}
});

ivPlayButton.setOnClickListener(v -> {
if (Boolean.TRUE.equals(musicPlaying[0].getValue())) {
ivPlayButton.setImageResource(R.drawable.ic_pause);
musicPlaying[0].setValue(false);
} else {
ivPlayButton.setImageResource(R.drawable.ic_play);
musicPlaying[0].setValue(true);
}
});

final NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.navHostFragment);
assert navHostFragment != null;
navController = navHostFragment.getNavController();
NavigationUI.setupWithNavController(bottomNavigationView, navController);

}

}

ActivityHome.xml









NAV GRAPH.xml
















Первым фрагментом для загрузки является Home Fragment.java
ВСЕ МОИ ФРАГМЕНТЫ Бэкэнд-код в настоящее время просто раздувает макет а xml — это просто текст и изображение. ничего не отображается, пока тема не будет переключена.
package com.example.synthshine_music;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class HomeFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... mode-is-sw
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»