Android:ImageView只应在一种情况下显示图像,但始终显示它

时间:2015-01-29 02:36:11

标签: java android imageview

有人能够注意到我的这段代码中有什么不对吗?作为一个完整的Android菜鸟,我正在尝试使用ImageView仅在没有连接的情况下显示消息和图像(“tryagainimage.png”)。否则,我继续使用WebView,在这种情况下不应显示消息和图像。

这就是我试图这样做的方式:

在我的MainActivity.java中,我有以下部分:

...
private ImageView myImgView;
...
if (!DetectConnection.checkInternetConnection(this)) {
        Toast.makeText(getApplicationContext(), "No connection.", Toast.LENGTH_SHORT).show();
        ImageView myImgView = (ImageView) findViewById(R.id.imageViewTryAgainImage);
        mImgView.setImageResource(R.drawable.tryagainimage);
        }
        else {
        myWebView = (WebView) findViewById(R.id.activity_main_webview);
...

这是activity_main.xml中的部分:

...
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageViewTryAgainImage"
    android:src="@drawable/tryagainimage"
    android:visibility="visible"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true" />
...

如果没有连接,会出现Toast消息,并显示图像。通过连接,不显示Toast消息,但仍显示图像。总之,无论怎样,图像“tryagainimage”总会出现。另一方面,Toast消息仅在需要时显示。

有人能注意到代码中有什么问题吗?谢谢!

5 个答案:

答案 0 :(得分:0)

android:visibility="visible"

最初是否应该隐藏,并且只有在确定没有连接后才将其设置为可见?

答案 1 :(得分:0)

将其放入else部分

myImgView.setVisibility(View.GONE);

您只能将图像视图实例化一次。你已经声明了它,但我不确定你是否在实例化它。如果是,则可以删除冗余实例。

总的来说应该是

ImageView myImgView = (ImageView) findViewById(R.id.imageViewTryAgainImage);

if (!DetectConnection.checkInternetConnection(this)) {
    Toast.makeText(getApplicationContext(), "No connection.", Toast.LENGTH_SHORT).show();
    //mImgView.setImageResource(R.drawable.tryagainimage); // This is not required, its already set in xml
    }
    else {
        myImgView.setVisibility(View.GONE);
        myWebView = (WebView) findViewById(R.id.activity_main_webview);
    }

答案 2 :(得分:0)

您需要将ImageView可见性设置为View.GONE或View.INVISIBLE。我建议你使用View.GONE。

像这样 -

if (!DetectConnection.checkInternetConnection(this)) {
    //Your code
    mImageView.setVisibility(View.VISIBLE);
} else {        
    mImageView.setVisibility(View.GONE);
    //Your code
}

另一个好的选择是将TextView与drawableTop一起使用。这将让你展示图像以及一些关于究竟出错的额外细节,以便用户可以修复它。

答案 3 :(得分:0)

您应该将您的可见性设置为默认设置,并且仅在没有连接时将其打开。这是一种更符合逻辑的编码方式,因为没有互联网连接是一个例外,而不是主流。

...
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageViewTryAgainImage"
    android:src="@drawable/tryagainimage"
    android:visibility="visible"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true" />
...    

...
<ImageView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/imageViewTryAgainImage"
     android:src="@drawable/tryagainimage"
     android:visibility="gone"
     android:layout_centerHorizontal="true"
     android:layout_alignParentBottom="true" />
...

和你的java代码

if (!DetectConnection.checkInternetConnection(this))
{
    Toast.makeText(getApplicationContext(), "No connection.", Toast.LENGTH_SHORT).show();
    ImageView myImgView = (ImageView) findViewById(R.id.imageViewTryAgainImage);
    myImgView.setVisibility(View.VISIBLE);
    mImgView.setImageResource(R.drawable.tryagainimage);
}
else
{
    myWebView = (WebView) findViewById(R.id.activity_main_webview);
...

答案 4 :(得分:0)

谢谢!

这绝对是正确的解决方案。 (无论出于何种原因,

    myImgView.setVisibility(View.VISIBLE);

一直在我正在使用的测试手机上崩溃,我无法弄清楚原因,但我尝试调整解决方案,并使用:

            findViewById(R.id.imageViewTryAgainImage).setVisibility(View.VISIBLE);

然后它在手机上运行没有错误。)

谢谢!