首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQLite数据库的动态微调工具

使用SQLite数据库的动态微调工具
EN

Stack Overflow用户
提问于 2010-12-22 07:41:13
回答 1查看 5.6K关注 0票数 0

我已经能够使用SimpleCursorAdapter成功地将两个微调工具链接到一个数据库。但是,我需要使第二个微调器选择依赖于第一个微调器选择。

下面是我链接数据的方式:

代码语言:javascript
复制
    public class epa_estimates_button extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.epa_estimates);
    final Cursor cYear;
    final Cursor cMake;
    final Spinner mMakeSpinner;
    final Spinner mModelSpinner;
    cYear = (Cursor) DataBaseHelper.getEPADataYear();
    this.startManagingCursor(cYear);

    SimpleCursorAdapter scaYear = new SimpleCursorAdapter(this, R.layout.spinner_layout,cYear,new String[] {DataBaseHelper.EPA_COLUMN_ONE},new int[]{R.id.text1});
    scaYear.setDropDownViewResource(R.layout.spinner_dropdown);
    mYearSpinner = (Spinner) findViewById(R.id.yearSpinner);
    mYearSpinner.setAdapter(scaYear);

    cMake = (Cursor) DataBaseHelper.getEPADataMake();
    this.startManagingCursor(cMake);

    SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1});
    scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
    mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
    mMakeSpinner.setAdapter(scaMake);
}}

这是我的DataBaseHelper

代码语言:javascript
复制
    public class DataBaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/org.application.ocdmpg/databases/";
private static String DB_NAME = "ocd_mpg.mp3";
private final int DB_VERSION = 1;
private static SQLiteDatabase myDataBase; 
private final Context myContext;
private static final String EPA_TABLE_NAME = "epa_data";
private static final String EPA_COLUMN_ID = "_id";
public DataBaseHelper(Context context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
}
    public static Cursor getEPADataYear() 
{
    return myDataBase.query(EPA_TABLE_NAME, //table name
            new String[] {EPA_COLUMN_ID, EPA_COLUMN_ONE}, //list of columns to return
            null, //filter declaring which rows to return; formatted as SQL WHERE clause
            null,
            EPA_COLUMN_ONE, //filter declaring how to group rows; formatted as SQL GROUP BY clause
            null, //filter declaring which row groups to include in cursor; formatted as SQL HAVING clause
            null); //how to order rows; formatted as SQL ORDER BY clause
}
public static Cursor getEPADataMake() 
{
    return myDataBase.query(EPA_TABLE_NAME, new String[] {
            EPA_COLUMN_ID,
            EPA_COLUMN_TWO,
            }, 
            null, 
            null, 
            EPA_COLUMN_TWO, 
            null, 
            null);
}}

我已经找到了setOnItemSelectedListener的代码,并尝试添加用于将数据链接到微调器的代码,但startManagingCursor方法和SimpleCursorAdapter构造函数给出了一个未定义的错误。我应该使用ArrayAdapter来填充我的微调器吗?或者有没有办法改正下面的代码?

代码语言:javascript
复制
        mYearSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // your code here
            cMake = (Cursor) DataBaseHelper.getEPADataMake();
            this.startManagingCursor(cMake);

            SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1});
            scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
            mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
            mMakeSpinner.setAdapter(scaMake);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

        });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-22 08:33:48

根据您的编辑和评论更新了

您对this.startManagingCursor(cMake)的调用需要更改为startManagingCursor(cMake)epa_estimates_button.this.startManagingCursor(cMake),因为它是从内部类( OnItemSelectedListener)进行的。它不需要'this‘(前一种情况)就可以工作,因为,好吧,基本上,Java知道你指的是哪个this。它与类名一起工作,因为这清楚地表明了Java将自己弄清楚的东西。但是未限定的this意味着您引用的是内部类this,这是行不通的。

非常类似地,在您的onItemSelectedListener中,对startManagingCursor的调用需要重写为:

代码语言:javascript
复制
SimpleCursorAdapter scaMake = new SimpleCursorAdapter(epa_estimates_button.this,
    R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},
    new int[]{R.id.text1});

(我认为您的数据库查询将需要工作--您似乎没有使用任何类型的WHERE子句将“make”结果限制在适当的年份。但如果你真的被这个问题卡住了,请将其作为另一个问题发布。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4504992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档