所以标题说明了一切.我的内部出现了编译错误onClick.
这是代码.
public class fieldsActivity extends Activity {
Button addSiteButton;
Button cancelButton;
Button signInButton;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// to create a custom title bar for activity window
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.fields);
// use custom layout title bar
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);
Pager adapter = new Pager();
ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
mPager.setAdapter(adapter);
mPager.setCurrentItem(1);
addSiteButton = (Button) findViewById(R.id.addSiteButton);
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPager.setCurrentItem(2, true); //Compilation error happens here.
}
});
cancelButton = (Button) findViewById(R.id.cancel_button);
signInButton = (Button) findViewById(R.id.sign_in_button);
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*hao 123
如果你不想让它成为最终的,你总是可以把它变成一个全局变量.
Veg*_*ger 43
错误说明了一切,改变:
ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
Run Code Online (Sandbox Code Playgroud)
至
final ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
Run Code Online (Sandbox Code Playgroud)
the*_*_mr 19
这是一个有趣的答案.
您可以声明最终的单元素数组,并显然更改所需的数组元素.我确定它打破了这个编译器规则首先实现的原因,但是当你像今天一样处于时间绑定时它很方便.
我实际上不能为这一个声称功劳.这是IntelliJ的推荐!感觉有点hacky.但是看起来并不像全局变量那么糟糕,所以我认为值得一提.这只是问题的一个解决方案.不一定是最好的.
final int[] tapCount = {0};
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tapCount[0]++;
}
});
Run Code Online (Sandbox Code Playgroud)
正如@Veger 所说,您可以这样做,final以便可以在内部类中使用该变量。
final ViewPager pager = (ViewPager) findViewById(R.id.fieldspager);
Run Code Online (Sandbox Code Playgroud)
我调用它pager而不是mPager因为您将它用作方法中的局部变量onCreate。该m前缀cusomarily保留类的成员变量(即在类的开始声明,并提供给所有的类方法变量)。
如果您确实需要一个类成员变量,那么findViewById将其设为final 是行不通的,因为您不能在onCreate. 解决方案是不使用匿名内部类。这样mPager变量就不需要被声明为 final 并且可以在整个类中使用。
public class MainActivity extends AppCompatActivity {
private ViewPager mPager;
private Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
mPager = (ViewPager) findViewById(R.id.fieldspager);
// ...
mButton.setOnClickListener(myButtonClickHandler);
}
View.OnClickListener myButtonClickHandler = new View.OnClickListener() {
@Override
public void onClick(View view) {
mPager.setCurrentItem(2, true);
}
};
}
Run Code Online (Sandbox Code Playgroud)