1

我试图在侦听器中使用此代码更改按钮的 onClick 图像

public void onClick(View v) {
   if(v==ButtonName)
   ButtonName.setImageResource(R.drawable.clicked_button_image);
   //action code                              

}  

按钮的图像以这种方式正确更改,但是如果有人使用 Android 设备的后退按钮,则按钮会显示单击图像(因为清楚地显示了上一个活动的最后一个实例)

如果我尝试使用代码:

public void onClick(View v) {
       if(v==ButtonName)
       ButtonName.setImageResource(R.drawable.clicked_button_image);
       ButtonName.setImageResource(R.drawable.unclicked_button_image);
       //action code                              

    } 

按钮的图像不会改变。

我该如何解决这个问题?(无需编辑 xml)。

4

3 回答 3

0

当您单击返回按钮时如何更改?

@Override
public boolean onRestore()
{
    if(unclickedImageDisplayed)
    {
       ButtonName.setImageResource(R.drawable.unclicked_button_image);
    }

}

如果您查看文档和活动生命周期,您可以看到on Restore当您返回活动时调用了该方法。

也许通过在更改按钮背景时更改一个私有变量,并通过检查此布尔值,例如,您可以更改按钮的背景,以编程方式为其赋予初始状态。

于 2012-07-20T17:01:33.097 回答
0

为了达到这个效果,试试这个:

你必须在你的drawable文件夹中创建一个新的xml:(我叫button_action)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/clicked_button_image" android:state_pressed="true"/>
    <item android:drawable="@drawable/unclicked_button_image"/>
</selector>

在您的布局中:

<Button
        android:id="@+id/infobtncontact"
        style="@style/ButtonNormal"
        android:layout_marginTop="10dp"
        android:background="@drawable/button_action"
        android:src="@drawable/unclicked_button_image" />

可能必须重新启动 Eclipse 才能识别更改。

请原谅我糟糕的英语!

于 2012-07-20T17:08:48.143 回答
0

除非您解释为什么要使用此方法,否则您应该真正使用这样的自定义按钮

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" android:drawable="@drawable/clicked_button_image" /> <!-- pressed -->
  <item android:state_focused="true" android:drawable="@drawable/focus_button_image" /> <!-- focused -->
  <item android:drawable="@drawable/unclicked_button_image"/> <!-- default -->
</selector> 
于 2012-07-20T17:08:58.223 回答