【问题标题】:get value from database to set check box从数据库中获取值以设置复选框
【发布时间】:2011-03-05 02:57:33
【问题描述】:

如果语言的 KEY_ACT = 1 则复选框为真,我想构建从 getLang() 获取光标的复选框

这是我的 getLang()

public Cursor getLang() {
    return db.query(LANGS_TABLE, new String[] { 
            KEY_LANG_ID,
            KEY_LANG,
            KEY_ACT},
            null, null, null, null, null, null);
}

我有这样的数据库

         ContentValues initialValues3 = new ContentValues();
        initialValues3.put(KEY_LANG, "English");
        initialValues3.put(KEY_ACT, "1");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "French");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "German");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "Italy");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "Spanish");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();

所以当显示复选框时,必须显示英文,因为 KEY_ACT=1

这是我的复选框代码

protected void printSelectedLanguage(){
    int i = 0;
    db.open();
    Cursor c = db.getLang();
    for(i = 0; i < _options.length-1; i++ )
    {
        if (c.getString(c.getColumnIndex(DBAdapter.KEY_ACT)).equals(1)){
            _selections[i]=true;
        }
        if ( _selections[i]==true ) {
            db.setLang_Act(i+1, 1);
        }else if ( _selections[i]==false ){
            db.setLang_Act(i+1, 0);
        }
    }

但它没有显示数据库中的 KEY_ACT

我该怎么办?

/// 编辑以显示更多关于我在警报对话框中的复选框

protected Dialog onCreateDialog( int id ) 
{
    return 
    new AlertDialog.Builder( this )
        .setTitle( "Select language" )
        .setMultiChoiceItems( _options, _selections, new DialogSelectionClickHandler() )
        .setPositiveButton( "OK", new DialogButtonClickHandler() )
        .create();}
  public class DialogSelectionClickHandler implements DialogInterface.OnMultiChoiceClickListener
{
    @Override
    public void onClick( DialogInterface dialog, int clicked, boolean selected )
    {
        Log.i( "MEooooo", _options[ clicked ] + " selected: " + selected );

    }
}

public class DialogButtonClickHandler implements DialogInterface.OnClickListener
{
    @Override
    public void onClick( DialogInterface dialog, int clicked )

    {
        switch( clicked )
        {
            case DialogInterface.BUTTON_POSITIVE:


                printSelectedLanguage();
                break;
            case DialogInterface.BUTTON_NEGATIVE:

                printSelectedLanguage();
                break;
        }
    }
}

【问题讨论】:

    标签: android database checkbox cursor


    【解决方案1】:

    .equals() 比较中使用"1" 代替1 怎么样?

    如果1 为真而0 为假,您也可以将该字段检索为int:

    if (c.getInt(c.getColumnIndex(DBAdapter.KEY_ACT)) == 1) {
    

    编辑 - 您可能想要传递实际的光标,因为您的数据库设置与 setMultipleChoiceItems() 期望的设置相匹配:

    new AlertDialog.Builder( this )
        .setTitle( "Select language" )
        .setMultiChoiceItems(cursor, KEY_ACT, KEY_LANG, new DialogSelectionClickHandler())
        .setPositiveButton( "OK", new DialogButtonClickHandler() )
        .create();
    

    【讨论】:

    • 您可以将代码粘贴到您实际启用/设置复选框的位置吗?
    • 请查看我对此代码的编辑,它已经可以选择语言,但不显示来自数据库的检查 (KEY_ACT=1)
    • 那 printSelectedLanguage() 怎么办?
    • 哇它现在显示 ^^ 但 printSelectedLanguage() 不起作用下一步我应该怎么做请帮助
    【解决方案2】:

    您最好将 KEY_ACT 存储为布尔值或整数,不是吗?这样,它可以更流畅地使用复选框。

    您是否确定调用 c.moveToNext() 或 c.moveToFirst() 来获取游标中的记录?

    在完成光标操作后不要忘记调用 c.close(),以保持应用程序整洁。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 2022-07-28
      • 2020-05-02
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多