2

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

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

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

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

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

我已经剪掉了很多,因为网格是分阶段制作的,标题,空白行等,但网格确实按我想要的方式显示。

当我触摸一条线时,它会显示其唯一的 id。

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

包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();
        } 
    } 
}

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

谢谢你的帮助。

4

2 回答 2

0

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

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

我不确定我是否理解这个问题,但这会给你所有的 ID 都在一个TableRow

public void onClick(View v) {
    if (v instanceof TableRow) {
        TableRow row = (TableRow) v;
        String msg = "";
        for (int i=0; i < row.getChildCount(); i++) {
            TextView child = (TextView) row.getChildAt(i);
            msg += String.valueOf(child.getId()) + " ";
        }
        Toast toast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
        toast.show();
    }
}
于 2012-12-19T00:32:18.587 回答
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可能是最直接的。

于 2012-12-19T23:22:56.833 回答