出现这个问题是因为题主试图在一个类的初始化域(Initializing Field)中进行除赋值及声明变量以外的操作,而这种操作在 Java 中是不允许的。通常一个 Java 公共类的结构如下:
public class Foo {
// 这里叫做初始化域,用来声明一个类中的全局变量,此区域中只能进行
// 赋值或声明新变量的操作,笼统一点说就是此区域中的代码必须是
// ImageView image = ...; 或者 ImageView image; 这种形式。
// 题主的代码试图在此区域中调用 LinearLayout 的 addView 方法,却
// 没有将其返回值赋予任何变量,所以会报错。
int varOne = 3;
private int varTwo = 3;
public String varThree = "STR";
protected String varFour = varThree.toString();
int[] varFive = new int[] {3, 4, 5, 6};
// 这个区块叫初始化块(Initializer Block),此区域中的所有代码会被
// 复制到类的构造函数(下方)当中,所以此区域中可以进行方法的调用而不
// 进行赋值。此区域是可有可无的。
{
varFour.toString();
}
// 这个区域叫做构造函数(Constructor),它是在该类对象被创建时第一个
// 被调用的函数。构造函数的函数名需要与类名完全相同,且没有任何返回值,
// (即连 void 也不会返回)。此函数的主要目的是初始化在初始化域中所定
// 义的各种全局变量。构造函数不是必需的,如果没有此函数 Java 会自动
// 继承父类的构造函数,如果没有父类 Java 会自动添加一个空的构造函数。
public Foo(int a, String b, LinearLayout c) {
this.varOne = a;
...
}
// 以下就是类的各种常规方法的定义了。
private void methodOne() {
...
}
public void methodTwo() {
...
}
protected static String methodThree() {
...
}
}
由上可见,如果想调用一个变量的方法,而不将其返回值赋予新的变量的话,必须在类的初始化块、构造函数或者各种方法中进行操作,而不能在其他地方。事实上,Android 的 Activity 类虽然没有定义构造函数,但提供了 onCreate 方法让你进行变量的初始化以及对变量的各种操作。onCreate 方法会在一个新的 Activity 对象建立后立即执行,所以题主应该将 addView 方法的执行移动到 onCreate 方法中,如下:
public class MainActivity extends AppCompatActivity {
private int[] mImages = new int[] {
R.drawable.image01,
R.drawable.image02,
R.drawable.image03
};
private int mCurrentImg = 0;
private LinearLayout mLinearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLinearLayout = (LinearLayout) findViewById(R.id.rest);
ImageView imageView = new ImageView(this);
mLinearLayout.addView(imageView);
}
}
你将addview这个方法放到oncreate里面去执行