我正试图在android中做这样的事情:
// If the parent is a viewpager
if (parentIsViewPager)
{
// Retrieve the view's layout informations specific to viewpagers
ViewPager.MarginLayoutParams marginLayoutParams = (ViewPager.MarginLayoutParams) getLayoutParams();
}
// If the parent is not a viewpager (mainly a viewgroup)
else
{
// Retrieve the view's layout informations for a viewgroup
ViewGroup.MarginLayoutParams marginLayoutParams = getLayoutParams();
}
Log.i("Test","marginLayoutParams.leftMargin = " + marginLayoutParams.leftMargin);
不幸的是,IDE(Android Studio 1.5.1)告诉我它无法在上面的最后一行找到layoutParams的声明......但是我在if语句中声明了它!
我想这里有一些关于范围的东西,但由于我项目中的以下代码非常大,我不能在每个if语句中复制它。
那么我怎样才能实现这个或类似的东西呢?
修改
正如我猜测的那样,这在评论中得到了证实,这是一个范围问题。好的,明白了。
感谢您的帮助。
答案 0 :(得分:1)
变量声明仅限于它的范围。 在这种情况下,if-else语句。
你可以这样做:
// Declare in correct scope and define later...
ViewGroup.LayoutParams layoutParams;
// If the parent is a viewpager
if (parentIsViewPager)
{
// Retrieve the view's layout informations specific to viewpagers
layoutParams = (ViewGroup.LayoutParams) getLayoutParams();
}
// If the parent is not a viewpager (mainly a viewgroup)
else
{
// Retrieve the view's layout informations for a viewgroup
layoutParams = (ViewGroup.LayoutParams) getLayoutParams();
}
Log.i("Test","layoutParams.width = " + layoutParams.width);
答案 1 :(得分:1)
这个编译错误与android或IDE无关,只是如下:
if (parentIsViewPager)
{
// Retrieve the view's layout informations specific to viewpagers
ViewPager.LayoutParams layoutParams = (ViewPager.LayoutParams) getLayoutParams();
}
在这种情况下,"变量" layoutParams有一个Scope:只在if条件中, 第二部分:
else
{
// Retrieve the view's layout informations for a viewgroup
ViewGroup.LayoutParams layoutParams = getLayoutParams();
}
同样的标准适用..
错误是因为您试图使用超出其范围的对象... 如果条件
,则不能再使用layoutParams答案 2 :(得分:1)
只是复制if-else两侧的Log语句而不是一个选项,还是layoutParams引用的呢?
test