Как спустить / скрыть (невидимый) ViewStub из меню (onOptionsItemSelected)? - PullRequest
3 голосов
/ 04 ноября 2011

Я получаю исключение NullPointerException, пытаясь удалить или сделать невидимым ViewStub из моего пользовательского интерфейса.Я просто хотел убедиться, что все делаю правильно.

Я надуваю свою ViewStub в методе onItemLongClick объекта GalleryView, выполняя следующие действия:

@Override
            public boolean onItemLongClick(AdapterView<?> arg0, View viu, int arg2,
                    long arg3) {
                Toast.makeText(GalleryView.this, "New item added to Favorites", Toast.LENGTH_SHORT).show();


                favsCount++;

               //checking to see if ViewStub is already inflated or not
                if(!stubvis){
                stub = (ViewStub) findViewById(R.id.stub1);
                stub.inflate();
                stubvis = true;
                trayUP = true;
                }

                return true;
            }

            });

, а затем в onPrepareOptionsMenu ().добавление пункта меню на основе видимости ViewStub.Если он раздут и виден, я создаю пункт меню, чтобы скрыть его, в противном случае - элемент меню, который нужно показать / сделать видимым.

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

menu.clear();


if(trayUP) {

menu.add(0, HIDETRAY, 0, "Hide Favorites Tray");

} else {

menu.add(0, SHOWTRAY, 0, "Show Favorites Tray");

}

return super.onPrepareOptionsMenu(menu);

}

Далее в onOptionsItemSelected () я пишу два случая на основевыбор пункта меню.Случай 1, когда лоток не виден, поэтому я делаю его видимым.Случай 2, когда он виден, поэтому я скрываю его, выполняя следующее:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

        case HIDETRAY:

            Log.v(TAG, "Hiding Favs Tray");
            findViewById(R.id.stub1).setVisibility(View.GONE);
            trayUP = false;

        case SHOWTRAY:

            Log.v(TAG, "Showing Favs Tray");
            findViewById(R.id.stub1).setVisibility(View.VISIBLE);
            trayUP = true;

        }

    return true;

}

Я знаю, что где-то совершаю глупую ошибку.И мой разум слишком насыщен, чтобы думать прямо сейчас.Нужна помощь: (

Спасибо,

Ab

Ответы [ 2 ]

3 голосов
/ 09 октября 2012

После того, как заглушка представления была завышена, она больше не будет существовать в иерархии представлений, она будет заменена завышенным содержимым.Таким образом, вы можете только раздувать заглушки вида, нет возможности «раздувать» их или изменять их видимость.

Вы можете определить завышенный идентификатор для ViewStub, который вы можете использовать для ссылки на раздутое содержимое, а затем использовать.setVisibility (GONE) или .setVisibility (VISIBLE) для последующего включения и выключения этого представления.

Пример макета

    <ViewStub
        android:id="@+id/stub_vTray"
        android:inflatedId="@+id/vTray"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout="@layout/custom_tray_stub" />

Пример Java

private Boolean mblnTrayInflated = false;
private Boolean mblnTrayVisible = false;

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case HIDETRAY:

        if (mblnTrayInflated && mblnTrayVisible)
        {
            findViewById(R.id.vTray).setVisibility(View.GONE);
            mblnTrayVisible = false;
        }

        case SHOWTRAY:

        if (!mblnTrayInflated)
        {
            ((ViewStub)findViewById(R.id.stub_vTray)).inflate();
            mblnTrayInflated = true;
            mblnTrayVisible = true;
        }
        else if (!mblnTrayVisible)
        {
            findViewById(R.id.vTray).setVisibility(View.VISIBLE);
            mblnTrayVisible = true;
        }

    }
    return true;
}
1 голос
/ 04 ноября 2011

Абхишек, похоже, вы пытаетесь реализовать какую-то функциональность ящика. Возможно, вам удастся обойти весь этот беспорядок настройки видимости представлений, если вместо этого просто использовать класс SlidingDrawer .

...