有人能够注意到我的这段代码中有什么不对吗?作为一个完整的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消息仅在需要时显示。
有人能注意到代码中有什么问题吗?谢谢!
答案 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);
然后它在手机上运行没有错误。)
谢谢!