【问题标题】:Android SQLite Using two spinners as view filtersAndroid SQLite 使用两个微调器作为视图过滤器
【发布时间】:2015-02-24 21:43:05
【问题描述】:

主要问题:

当我尝试使用我的 LoadGrid 显示结果时,想知道这两个微调器是否有任何冲突。就像一个人覆盖另一个人并因此而得到一个空的结果。如果是这样,我该如何组合微调器的两个结果以获得所需的视图。

一些细节:

我想在我的 gridview 上使用两个微调器作为过滤器。一个用于条款,一个用于状态。具体来说,我想要发生的是用户可以单独或一起使用这两个微调器来过滤数据库中的帐户视图。

一步一个脚印,我已经让一个微调器运行并正常工作。所以我克隆了那个工作的微调器代码,让我的第二个启动并运行。不,不工作。现在使用两个微调器中的任何一个都不会产生任何结果。没有帐户出现了。它会让我从微调器中进行选择,但我的网格仍然是空的。

如果缺少任何内容或您需要查看更多代码,请随时提出。干杯。

这里是旋转器 sn-ps:

        Utilities.ManageTermSpinner(this.getParent(), spinTerm);
    try {

        spinTerm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                       int arg2, long arg3) {
                LoadGrid();

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });

    } catch (Exception ex) {
        txtTest.setText(ex.toString());
    }


    Utilities.ManageStatSpinner(this.getParent(), spinStat);
    try {

        spinStat.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                      int arg2, long arg3) {
                LoadGrid();


            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
       });

    } catch (Exception ex) {
        txtTest2.setText(ex.toString());
    }

}

这是它引用的 LoadGrid:

    public void LoadGrid() {
    dbHelper = new DatabaseHelper(this);
    try {

        View v = spinTerm.getSelectedView();
        TextView txt = (TextView) v.findViewById(R.id.txtTermClass);
        String Terms = String.valueOf(txt.getText());
        Cursor c = dbHelper.getAccByTerms(Terms);
        startManagingCursor(c);

        View x = spinStat.getSelectedView();
        TextView txt2 = (TextView) x.findViewById(R.id.txtStatID);
        String Status = String.valueOf(txt2.getText());
        Cursor b = dbHelper.getAccByStatus(Status);
        startManagingCursor(b);

        String[] from = new String[]{DatabaseHelper.colName, DatabaseHelper.colAmount, DatabaseHelper.colTermsClass, DatabaseHelper.colStatClass};
        int[] to = new int[]{R.id.colName, R.id.colAmount, R.id.colTerms, R.id.colStat};

        SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.gridrow, c, from, to);
        grid.setAdapter(sca);

        SimpleCursorAdapter sba = new SimpleCursorAdapter(this, R.layout.gridrow, b, from, to);
        grid.setAdapter(sba);

    } catch (Exception ex) {
        AlertDialog.Builder b = new AlertDialog.Builder(this);
        b.setMessage(ex.toString());
        b.show();
    }
}

用于 TERMS 和 STATUS 的 dbHelper sn-ps:

public Cursor getAccByTerms(String Terms)
{
    SQLiteDatabase db=this.getReadableDatabase();
    String [] columns=new String[]{"_id",colName,colAmount,colPurpose,colTermsClass,colDate,colEditDate,colStatClass};
    Cursor c=db.query(viewAccs, columns, colTermsClass+"=?", new String[]{Terms}, null, null, null);
    return c;
}

public Cursor getAccByStatus(String Status)
{
    SQLiteDatabase db=this.getReadableDatabase();
    String [] columns=new String[]{"_id",colName,colAmount,colPurpose, colTermsClass,colDate,colEditDate,colStatClass};
    Cursor d=db.query(viewAccs,columns, colStatClass +"=?",new String[]{Status},null,null,null);
    return d;
}

还有我保存 ManageSpinner 东西的实用程序 sn-p:

public class Utilities {
static public void ManageTermSpinner(Context context, Spinner view) {
    DatabaseHelper dbHelper = new DatabaseHelper(context);

    Cursor c = dbHelper.getAllTerms();

    SimpleCursorAdapter ca = new SimpleCursorAdapter(context, R.layout.termspinnerrow, c, new String[]{DatabaseHelper.colTermsClass, "_id"}, new int[]{R.id.txtTermClass});

    view.setAdapter(ca);


}

static public void ManageStatSpinner(Context context, Spinner view) {
    DatabaseHelper dbHelper = new DatabaseHelper(context);

    Cursor d = dbHelper.getAllStatus();

    SimpleCursorAdapter da = new SimpleCursorAdapter(context,R.layout.statspinnerrow, d, new String[]{DatabaseHelper.colStatClass,"_id"}, new int[]{R.id.txtStatClass});

    view.setAdapter(da);
}

【问题讨论】:

  • 我没有真正明白这个问题,但我知道您想根据两个条件过滤结果。您将不得不更改您正在使用的 sqlite 查询。使用 AND 子句和 where 子句根据两个微调器过滤结果。最好写这段代码“dbHelper.getAccByTerms(Terms);”
  • 感谢您的提醒。澄清了我的主要担忧并添加了 sn-ps。我将研究您提到的 AND 和 WHERE 子句并回复您。再次感谢

标签: android sqlite gridview filtering android-spinner


【解决方案1】:

你需要这样做:

public Cursor getAccByTermsAndStatus(String Terms, String status)
{
    SQLiteDatabase db=this.getReadableDatabase();
    String [] columns=new String[]{"_id",colName,colAmount,colPurpose,colTermsClass,colDate,colEditDate,colStatClass};
    Cursor c=db.query(viewAccs, columns, colTermsClass+"=? AND " + colStatClass + "=?", new String[]{Terms, status}, null, null, null);
    return c;
}

【讨论】:

  • 是的,当我尝试使用您提到的 WHERE 和 OR 子句时,得到的代码几乎相同,除了我的语法与“”哈哈完全错误。非常感谢,干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多