Android - 从SQLite表行中检索所有数据

时间:2012-12-18 23:01:20

标签: android sqlite textview

我已经搜索过,找不到我的问题的答案,所以我希望我没有完全咆哮错误的树(可以这么说)。

我是Android的新手,已经开始创建一个应用程序。我的应用程序在一个屏幕上创建并使用公共类向SQLite数据库添加条目DatabaseHandler扩展了SQLiteOpenHelper,这一切似乎都有效。

我检索所有数据并将其填充到网格中,现在又可以了。

我的问题是我无法从网格中检索到一条完整的行。

我使用以下代码填充/显示网格。

由于网格是分阶段,标题,空白行等,但我已经切割了很多,但网格确实按照我的要求显示。

id的工作就像我触摸一条线时显示它的唯一ID。

onClick在最后是正确的,当我使用getText()而不是getID()时,它返回的是labelDate中的数据。如何检索下面列出的所有标签?

package com.pump.diary;

import java.util.List;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class PumpDiaryReview extends Activity implements android.view.View.OnClickListener{
DatabaseHandler db = new DatabaseHandler(this);

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pump_diary_review);

    TableLayout tl = (TableLayout) findViewById(R.id.gridview);
    boolean doFirstHeadings = true;
    String dateCheck = "";
    Integer count=0;

    List<Readings> readings = db.getAllReadings();
    for (Readings re : readings)
    {
        if (doFirstHeadings == true)
        {
            //First record so setup the headings.
            TableRow tr_head = new TableRow(this);
            tr_head.setId(10);
            tr_head.setBackgroundColor(Color.GRAY);
            tr_head.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            TextView label_date = new TextView(this);
            label_date.setText("Date:Time");
            TextView label_CP = new TextView(this);
            label_CP.setText("CP");;
            TextView label_BG = new TextView(this);
            label_BG.setText("BG");
            TextView label_QA = new TextView(this);
            label_QA.setText("QA");
            TextView label_CN = new TextView(this);
            label_CN.setText("CN"); 
            TextView label_KT = new TextView(this);
            label_KT.setText("KT");  

            TextView[] tvHeaderArray = {label_date, label_CP, label_BG, label_QA, label_CN, label_KT};

            for (TextView tvHeader : tvHeaderArray)
            {
                tvHeader.setTextColor(Color.WHITE);
                tr_head.addView(tvHeader);
            }
            tl.addView(tr_head, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            doFirstHeadings = false;
            count = 0;
        }

        // Create the table row
        TableRow tr = new TableRow(this);
        tr.setClickable(true);
        tr.setId(100+count);
        tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        TextView labelDATE = new TextView(this);
        TextView labelCP = new TextView(this);
        TextView labelBG = new TextView(this);
        TextView labelQA = new TextView(this);
        TextView labelCN = new TextView(this);
        TextView labelKT = new TextView(this);
        TextView[] tvArray = {labelDATE, labelCP, labelBG, labelQA, labelCN, labelKT};

        if (!dateCheck.equals(re.getDate()) || (dateCheck == null) || dateCheck == "")
        {
            //Add a blank line in.
            TableRow tr_blank = new TableRow(this);
            tr_blank.setId(10);
            tr_blank.setBackgroundColor(Color.GRAY);
            tr_blank.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            TextView label_date = new TextView(this);
            label_date.setId(20);
            label_date.setText(re.getDate());
            label_date.setTextColor(Color.WHITE);
            tr_blank.addView(label_date);

            tl.addView(tr_blank, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        }

        labelDATE.setText(re.getTime());
        labelCP.setText(re.getCP());
        labelBG.setText(re.getBG());
        labelQA.setText(re.getQA());
        labelCN.setText(re.getCN());
        labelKT.setText(re.getKT());
        for (TextView tv : tvArray)
        {
            tv.setTextColor(Color.WHITE);
            tv.setId(200+count);
            tr.setOnClickListener(this);
            tr.addView(tv);
        }
        //add this to the table row
        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        dateCheck = re.getDate().toString();
        ++count;
    }
    }
    public void onClick(View v) 
    { 
        if (v instanceof TableRow) 
        { 
            TableRow row = (TableRow) v; 
            TextView child = (TextView) row.getChildAt(0); 
            Toast toast = Toast.makeText(this, String.valueOf(child.getId()), Toast.LENGTH_SHORT); 
            toast.show();
        } 
    } 
}

如果需要,我可以提供网格创建的所有代码。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

            TextView child = (TextView) row.getChildAt(0); <------------------
            Toast toast = Toast.makeText(this, String.valueOf(child.getId()), Toast.LENGTH_SHORT); 
            toast.show();

你是专门请求该行的第一个孩子并从中获取文本,当然这只会产生一个值。为了得到所有其余的,我建议你去List<Readings>并通过索引指定你想要的对象。然后你可以打印出来自对象的所有东西。至于你如何得到这个索引......对于你当前的实现,我想也许标记你的textViews与索引正在制作并由你的List填充可能是最直接的。