0

我正在构建一个 Android 应用程序。我正在使用 Sqlite 数据库、四个单选按钮和一个文本视图。当我单击每个单选按钮时,它应该显示数据库中的下一组数据。现在,它只显示数据库中的第一个数据行。如何更改我的代码以使其显示适当的行?

编码

   db.open();
    try{

        final Cursor c = db.getAllQue();
        if(c != null)
        {
        if (c.moveToFirst())
        {
            int size = c.getCount();
            for(int i=0;i<=size;i++)

                quen = (TextView) findViewById(R.id.textView1);
                anss1 = (RadioButton) findViewById(R.id.radio0);
                anss2 = (RadioButton) findViewById(R.id.radio1);
                anss3 = (RadioButton) findViewById(R.id.radio2);
                anss4 = (RadioButton) findViewById(R.id.radio3);
                rgp1 = (RadioGroup) findViewById(R.id.radioGroup1);
                String ques = c.getString(0);
                String anes1 = c.getString(1);
                String anes2 = c.getString(2);
                String anes3 = c.getString(3);
                String anes4 = c.getString(4);
                String anes = c.getString(5);

                rgp1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    public void onCheckedChanged(RadioGroup group, int checkedId) { 
                        RadioButton radioButton = (RadioButton)          findViewById(checkedId);
                         Toast.makeText(SqlliteActivity.this, "" + radioButton.getText(), 2000).show(); 
                        c.moveToNext();
                    }
        });

                    quen.setText(ques);
                anss1.setText(anes1);
                anss2.setText(anes2);
                anss3.setText(anes3);
                anss4.setText(anes4);

            }

        }

    }catch(Exception e){
        System.out.println(e);
    }
    db.close();
}
4

2 回答 2

0

你不是只迭代这条线吗?quen = (TextView) findViewById(R.id.textView1);

此外,您正在寻找光标迭代中的每个 UI 元素和 for...

但是,即使您将大括号添加到 for:

   db.open();
try{

    final Cursor c = db.getAllQue();
    if(c != null)
    {
    if (c.moveToFirst())
    {
        int size = c.getCount();
        for(int i=0;i<=size;i++) {

            quen = (TextView) findViewById(R.id.textView1);
            anss1 = (RadioButton) findViewById(R.id.radio0);
            anss2 = (RadioButton) findViewById(R.id.radio1);
            anss3 = (RadioButton) findViewById(R.id.radio2);
            anss4 = (RadioButton) findViewById(R.id.radio3);
            rgp1 = (RadioGroup) findViewById(R.id.radioGroup1);
            String ques = c.getString(0);
            String anes1 = c.getString(1);
            String anes2 = c.getString(2);
            String anes3 = c.getString(3);
            String anes4 = c.getString(4);
            String anes = c.getString(5);

            rgp1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                public void onCheckedChanged(RadioGroup group, int checkedId) { 
                    RadioButton radioButton = (RadioButton)          findViewById(checkedId);
                     Toast.makeText(SqlliteActivity.this, "" + radioButton.getText(),    2000).show(); 
                    c.moveToNext();
                }
         }

您将多次设置 OnchangeListener,但是当您真正单击按钮时,如果光标未关闭,您将移至下一条记录,但您的信息不会更新。

您应该区分什么是 UI 设置、按钮 clic 事件和光标或数据管理。

我认为最好的方法可能是:

  • 进行查询。
  • 制作一个 CursorAdaptor。
  • 单击按钮/单选按钮时,向适配器询问新位置,这可以检索包含所有信息的对象。
  • 调用填充视图的方法。

希望能帮助到你 :)

于 2012-06-12T07:47:44.763 回答
0

在循环之外启动您的对象元素。

        quen = (TextView) findViewById(R.id.textView1);
        anss1 = (RadioButton) findViewById(R.id.radio0);
        anss2 = (RadioButton) findViewById(R.id.radio1);
        anss3 = (RadioButton) findViewById(R.id.radio2);
        anss4 = (RadioButton) findViewById(R.id.radio3);
        rgp1 = (RadioGroup) findViewById(R.id.radioGroup1);

使用 while 循环获取下一条记录。

db.open();
try{
    final Cursor c = db.getAllQue();
    if(c != null)
    {
       c.moveToFirst();
       do{
             //All your operations
             //everytime you will get next record.

         }while(moveToNext());
}
}catch(Exception e){
    e.printstack();
}
于 2012-06-12T11:06:03.967 回答