0

在我的项目中,我想为我的数据库放置一个重置按钮(只有一个条目,我需要更新 4 种不同的信息以跟踪用户在测验中的进度)

问题是我需要在这个监听器中启动 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();
        }

    }); 

它说我不能在以不同方法定义的类中引用非最终变量(dbGestion)。但它不适用于 dbGestion 作为最终变量..

任何想法?

4

1 回答 1

1

您有几个选项可以使用:

  1. MainActivity 中的字段变量
  2. 最终变量onCreate()
  3. 匿名 OnClickListener 中的字段变量
  4. 内部的局部变量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在其他任何地方使用以及您的个人喜好。

于 2013-04-15T16:44:02.020 回答