非常基本的变量超出范围问题 - Java Android

Very Basic Variable Out of Scope Issue - Java Android

我正在尝试使用以下 3 个变量:

public boolean mDetailsExpanded;

public int mHeightBefore;

public String mHeaderItem;

然而,当我将它们分配给字符串、布尔值和整数时:

 public void setMessageDetailsExpanded(MessageHeaderItem i, boolean expanded,
            int heightBefore) {
        mDiff = (expanded ? 1 : -1) * Math.abs(i.getHeight() - heightBefore);
        String mHeaderItem = i.toString();
        boolean  mDetailsExpanded = expanded;
        int mHeightBefore = heightBefore;             

    }

然后尝试稍后保存它们:

  @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putFloat(BUNDLE_KEY_WEBVIEW_Y_PERCENT, calculateScrollYPercent());
        outState.putBoolean(getTag(), mDetailsExpanded);
        outState.putInt(getTag(),  mHeightBefore);
        outState.putString(getTag(), mHeaderItem);
        super.onSaveInstanceState(outState);

    }

由于超出范围,它们不断 return null。我怎样才能更正它以将它们置于 onSaveInstanceState 的范围内从而保持它们的值?

setMessageDetailsExpanded 中,您正在创建局部变量而不是分配给您的成员变量。将其更改为:

public void setMessageDetailsExpanded(MessageHeaderItem i, boolean expanded,
            int heightBefore) {
        mDiff = (expanded ? 1 : -1) * Math.abs(i.getHeight() - heightBefore);
        mHeaderItem = i.toString();
        mDetailsExpanded = expanded;
        mHeightBefore = heightBefore;             

}
String mHeaderItem = i.toString();
boolean  mDetailsExpanded = expanded;
int mHeightBefore = heightBefore;             

这是局部变量,它的作用域是方法作用域。这就是为什么无法在方法之外访问的原因。