Java 变量是从另一个内部类的内部类中访问的
我在另一个内部类中有一个内部类,我试图在两个内部类之外使用最终变量。代码如下:Java 变量是从另一个内部类的内部类中访问的,java,android,Java,Android,我在另一个内部类中有一个内部类,我试图在两个内部类之外使用最终变量。代码如下: final View v = inflater.inflate(R.layout.fragment_floor_plan, container, false); //final variable final Button button0 = v.findViewById(R.id.button21); button0.setOnClickListener(new View.OnClickListener()
final View v = inflater.inflate(R.layout.fragment_floor_plan, container, false); //final variable
final Button button0 = v.findViewById(R.id.button21);
button0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PhotoView photoView = v.findViewById(R.id.photo_view); //works fine here
photoView.setAlpha(0f);
System.out.println(photoView.isZoomable());
System.out.println(photoView.VISIBLE);
photoView1.animate().alpha(0f).setDuration(250);
photoView.animate().alpha(1f).setDuration(250);
photoView.bringToFront();
photoView.setOnScaleChangeListener(new OnScaleChangedListener() {
@Override
public void onScaleChange(float scaleFactor, float focusX, float focusY) {
if (photoView.getScale() <= photoView.getMinimumScale() + 0.1f) {
LinearLayout linearLayout = v.findViewById(R.id.linearLayout); //doesn't work here
linearLayout.bringToFront();
}
}
}
}
});
final View v=充气机。充气(右布局图。碎片平面图,容器,假)//最终变量
最终按钮按钮0=v.findViewById(R.id.button21);
button0.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
final PhotoView PhotoView=v.findviewbyd(R.id.photo_view);//在这里可以正常工作
photoView.setAlpha(0f);
System.out.println(photoView.isZoomable());
System.out.println(photoView.VISIBLE);
photoView1.animate().alpha(0f).setDuration(250);
photoView.animate().alpha(1f).setDuration(250);
photoView.bringToFront();
setOnScaleChangeListener(新的OnScaleChangedListener(){
@凌驾
缩放更改上的公共无效(浮动缩放因子、浮动焦点X、浮动焦点Y){
如果(photoView.getScale()现在我看到它,您的问题可能是视图v作为参数传递给OnClickListener的onClick方法,下面的代码可能试图访问而不是顶级视图变量
我的建议是重构变量名,以便引用正确的变量。如果传入的视图是您实际想要使用的视图,则应在方法签名中将其声明为final:
public void onClick(final View v) {
如果嵌套匿名类的封闭范围中的变量被声明为final或实际上是final,那么您应该能够从任何级别的嵌套内部匿名类中访问它
为了确保这一点,我举了一个小例子,并亲自尝试:
import java.util.function.*;
public class Main {
public static void main(String[] args) {
final int test = 11;
Runnable runnable = new Runnable() {
public void run() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println(test);
}
};
runnable.run();
}
};
runnable.run();
}
}
正如您所看到的,第二个runnable嵌套在另一个runnable中,运行代码访问integer测试并按其应该的方式打印它。好吧,匿名类在技术上是一种内部类,但我同意应该更具体地指定它。是的,感谢您的更正。我指的是v变量,第一行Thank是的,这似乎是我自己的问题,我迷失在自己的代码xD中