Abh*_*rma 3 android menu viewstub
我不断收到 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;
}
});
Run Code Online (Sandbox Code Playgroud)
然后在 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);
}
Run Code Online (Sandbox Code Playgroud)
接下来,在 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;
Run Code Online (Sandbox Code Playgroud)
}
我知道我在某个地方犯了一个愚蠢的错误。此刻我的思绪太饱和,无法直接思考。需要帮忙 :(
谢谢,
抗体
一旦视图存根被膨胀,它将不再存在于视图层次结构中,它将被膨胀的内容替换。所以你只能膨胀视图存根,没有办法“缩小”它们或改变它们的可见性。
您可以为 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" />
Run Code Online (Sandbox Code Playgroud)
示例 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5085 次 |
| 最近记录: |