Android 如何从菜单(OnOptions ItemSelected)中缩小/隐藏(不可见)ViewStub?

Android 如何从菜单(OnOptions ItemSelected)中缩小/隐藏(不可见)ViewStub?,android,menu,viewstub,Android,Menu,Viewstub,我不断得到NullPointerException,试图从我的UI中缩小或使ViewStub不可见。我只是想确定我做得对 我正在GalleryView的onItemLongClick方法中膨胀我的ViewStub,方法如下: @Override public boolean onItemLongClick(AdapterView<?> arg0, View viu, int arg2, long arg3) {

我不断得到NullPointerException,试图从我的UI中缩小或使ViewStub不可见。我只是想确定我做得对

我正在GalleryView的onItemLongClick方法中膨胀我的ViewStub,方法如下:

@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;
            }

            });
@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;
接下来,在onOptions ItemSelected()中,我将根据菜单项选择编写两个案例。案例1:当托盘不可见时,我使其可见。案例2:当它可见时,我通过执行以下操作将其隐藏:

@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;
            }

            });
@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

Ab hishek,看起来您正在尝试实现某种抽屉功能。如果您只需使用该类,就可以避免设置视图可见性的混乱局面。

一旦视图存根被膨胀,它将不再存在于视图层次结构中,它将被膨胀的c替换因此,您只能对视图存根进行充气,无法对其进行“放气”或更改其可见性

您可以为ViewStub定义一个膨胀ID,用于引用膨胀内容,然后使用.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" />

你得到了什么异常?你能发布完整的logcat stacktrace吗?stacktrace?NPE发生在哪里?NPE同时发生在选项ItemSelected中的View.GONE和View.VISIBLE语句我在ViewStub中使用GalleryView。不确定SlidingDrawer是如何工作的。我想尝试一下SlidingDrawer…但这有点困难让ViewStub工作起来也很酷。谢谢Kurtis!滑动抽屉对于我尝试做的事情来说太复杂了:(.你能帮我找到上述ViewStub问题的解决方案吗?@AbhishekSharma我不确定ViewStub的东西到底出了什么问题。我只是认为抽屉可能是一个好的开始。你到底发现了什么复杂的问题?记住,你可以在stackoverflow上问一些关于滑动抽屉的新问题:)