无法使用if语句中定义的变量

时间:2016-03-16 20:48:18

标签: java android

我正试图在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语句中复制它。

那么我怎样才能实现这个或类似的东西呢?

修改
正如我猜测的那样,这在评论中得到了证实,这是一个范围问题。好的,明白了。

感谢您的帮助。

3 个答案:

答案 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