在我的项目中,我想为我的数据库添加一个重置按钮(我需要更新一个条目,4个不同的信息,以便在测验中跟踪用户的进展)
问题是我需要在这个Listener中启动方法initDB():
public class MainActivity extends Activity implements View.OnClickListener {
private Button reset = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button reset = (Button)findViewById(R.id.raz);
DBGestion dbGestion = new DBGestion(this);
.
.
.
reset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
dbGestion.open();
dbGestion.initDB("Alex");
dbGestion.close();
}
});
它表示我不能在不同方法中定义的类中引用非final变量(dbGestion)。但它不能用dbGestion作为最终变量..
有什么想法吗?
答案 0 :(得分:1)
您可以使用以下几种方法:
onCreate()
onClick()
例如:
public class MainActivity extends Activity {
// (1) DBGestion dbGestion;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// (1a) dbGestion = new DBGestion(this); // Instantiate field variable
// (2) final DBGestion dbGestion = new DBGestion(this);
reset.setOnClickListener(new OnClickListener() {
// (3) DBGestion dbGestion = new DBGestion(MainActivity.this);
@Override
public void onClick(View v){
// (4) DBGestion dbGestion = new DBGestion(MainActivity.this); or new DBGestion(v.getContext());
dbGestion.open();
dbGestion.initDB("Alex");
dbGestion.close();
}
});
(有更多的选择,但他们开始变得古怪。)这些方法都不是天生正确或错误,它们都有自己的优点和缺点。选择取决于您是否在其他地方使用dbGestion
以及您的个人偏好。