【问题标题】:Sliding Drawer close on back button pressed按下后退按钮时滑动抽屉关闭
【发布时间】:2014-03-25 16:22:57
【问题描述】:

我的应用程序中有一个滑动抽屉。

当我点击android:handle 时它会打开,我已将其提供给图像视图。

我想在按下返回按钮时关闭抽屉。

代码:

SlidingDrawer slider;

@Override
public void onBackPressed() { 
    slider.close ();
}           
super.onBackPressed();

主要。 xml文件

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >


<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="right"
    android:orientation="vertical" >

<SlidingDrawer
android:id="@+id/slider"
android:layout_width="150dp"
android:layout_marginRight="0dp"
android:layout_height="match_parent"
android:handle="@+id/handle"
android:content="@+id/content"

android:orientation="horizontal"
>
<ImageView
    android:id="@+id/handle"
    android:background="@drawable/up"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:gravity="center"
    />
<GridView
    android:id="@+id/content"
    android:background="@color/black"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
</SlidingDrawer>
</LinearLayout>
</RelativeLayout>    

活动文件

@Override
public void onCreate(Bundle savedInstanceState)
{
    SlidingDrawer slide = (SlidingDrawer)this.findViewById(R.id.slider);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}


@Override public void onBackPressed() { 
if(slide.isOpened()){ 
slide.close ();
}
else{
    super.onBackPressed(); 
    }

}

}

【问题讨论】:

    标签: android slidingdrawer


    【解决方案1】:

    只有在实际打开时才需要关闭它:

    SlidingDrawer slider;
    
    @Override
    public void onBackPressed() { 
        if (slider.isOpened()) {
            slider.close ();
        } else {           
            super.onBackPressed();
        }
    }
    

    编辑

    您的slider 字段超出了scope。您需要将其声明为类字段,以便所有非静态方法都可以访问它。另请咨询this document

    【讨论】:

    • 应用程序仍然崩溃
    • 您是否使用findViewById 初始化了您的SlidingDrawer
    • 我已经编辑了问题添加了活动文件代码
    • 你在onCreate()之外初始化你的Drawer吗?您不必使用this btw
    • 但是您的Activity 代码看起来像那样(粘贴错误?)。请发布您的 LogCat 输出(如果您在底部没有看到 LogCat 窗口,请使用 Window - show View - LogCat
    【解决方案2】:

    您不会在in on back press方法中调用超级方法,您只需提供此方法...

    @Override
    public void onBackPressed() { 
         slider.close ();
    }  
    

    不要在后按里面调用 Super 方法

    【讨论】:

    • 您能否发布该 logcat 值,它可能会为您的问题提供任何解决方案
    猜你喜欢
    • 2020-06-04
    • 2016-12-05
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多