Скрытие элементов от панели инструментов, реализованных в одном упражнении, на разных фрагментах - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь скрыть определенные элементы из моей пользовательской панели инструментов, которую я развернул в 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"/>

Как вы можете ясно видеть, он имеет

  1. TextView , который динамически отображает и центрирует имя фрагмента, на котором находится текущий пользователь, и

  2. и 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)

при повороте в горизонтальное положение переключается назадФрагмент «Домой» и заполнитель заменяется извлеченным изображением

, как только я переключаюсь на статистику, просмотр изображения заменяется предполагаемым изображением

1 Ответ

0 голосов
/ 24 июня 2018

Виды на панели инструментов такие же, как и другие виды, которые я пытался изменить видимость, это работает.

toolbar.findViewById (R.id.image) .setVisibility (View.VISIBLE);

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.findViewById(R.id.image).setVisibility(View.GONE);
        toolbar.postDelayed(new Runnable() {
            @Override
            public void run() {

  toolbar.findViewById(R.id.image).setVisibility(View.VISIBLE);
            }
        }, 5000);
    }
}

Моя панель инструментов xml

<android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_blue_light"
            android:contentInsetEnd="0dp"
            android:contentInsetLeft="0dp"
            android:contentInsetRight="0dp"
            android:contentInsetStart="0dp"
            app:contentInsetEnd="0dp"
            app:contentInsetLeft="0dp"
            app:contentInsetRight="0dp"
            app:contentInsetStart="0dp">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView
                    android:id="@+id/image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_marginRight="10dp"
                    android:src="@drawable/ic_launcher_foreground" />

                <TextView
                    android:id="@+id/appTitle"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:text="Title"
                    android:textColor="@android:color/background_dark"
                    android:textSize="20sp" />


            </RelativeLayout>

        </android.support.v7.widget.Toolbar>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...