我已经搜索过,找不到我的问题的答案,所以我希望我没有完全咆哮错误的树(可以这么说)。
我是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();
}
}
}
如果需要,我可以提供网格创建的所有代码。
感谢您的帮助。
答案 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
填充可能是最直接的。