以下是我的代码,我已经为每个表行设置了OnClickListener,它正在运行。现在,我希望在用户单击任何行时启动一个新活动,并且我还想将行数据传递给textedit中的新活动。
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+docno.getText()+"'", null);
int rows = c.getCount();
table_layout.removeAllViews();
c.moveToFirst();
for (int i = 0; i < rows; i++) {
String rollno = c.getString(0);
String name = c.getString(1);
String marks = c.getString(2);
TableRow row = new TableRow(this);
row.setClickable(true);
row.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
v.setBackgroundColor(Color.GRAY);
}
});
row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
TextView et = new TextView(this);
TextView name1 = new TextView(this);
TextView marks1 = new TextView(this);
name1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
et.setGravity(Gravity.CENTER);
et.setTextSize(10);
et.setText(rollno);
name1.setGravity(Gravity.CENTER);
name1.setTextSize(10);
name1.setText(name);
name1.setBackgroundColor(0xFF00FF00);
name1.setHeight(20);
name1.setWidth(180);
marks1.setGravity(Gravity.CENTER);
marks1.setTextSize(10);
marks1.setText(marks);
row.addView(et);
row.addView(name1);
row.addView(marks1);
table_layout.addView(row);
c.moveToNext();
}
答案 0 :(得分:0)
http://developer.android.com/training/basics/firstapp/starting-activity.html
特别是&#34;开始第二项活动&#34;部分似乎正是您正在寻找的。从所选行中获取相关数据,然后使用intent.putExtra(key,value)将其发送到下一个活动。
答案 1 :(得分:0)
有很多方法可以做到这一点,下面将介绍一些方法。
您可以将putExtra方法用于新意图。您可以通过将数据作为文本传递来执行此操作,也可以显示Cursor并简单地传递行号。要将数据作为文本传递,请在onClick:
中Intent intt = new Intent(this,NewActivity.class);
intt.putExtra("rollno",rollno);
intt.putExtra("name",name);
intt.putExtra("marks",marks);
startActivity(intt);
然后在你的NewActivity中
Bundle extras = getIntent().getExtras();
if(extras != null) {
// Use extras.getString("rollno") in your setText method in your new activity
// Use extras.getString("name") in your setText method in your new activity
// Use extras.getString("marks") in your setText method in your new activity
}
您也可以通过在类中声明它来公开您的Cursor,但是在onCreate方法之外/之前。
public static Cursor c;
然后在你的onCreate中移除&#39;光标&#39;关键字一开始。然后,您可以在onClick中将数据作为行号传递:
Intent intt = new Intent(this,NewActivity.class);
intt.putExtra("rownum",i);
startActivity(intt);
然后在您的新活动中:
Bundle extras = getIntent().getExtras();
int rownum;
if(extras != null) {
c.moveToPosition(extras.getInt("rownum"));
et.setText(MainActivity.c.getString(0));
name1.setText(MainActivity.c.getString(1));
marks1.setText(MainActivity.c.getString(2));
}
你甚至可以在onClick上跳过通过意图的数据:
c.moveToPosition(i);
Intent intt = new Intent(this,NewActivity.class);
startActivity(intt);
然后,当您在NewActivity中使用getString()引用MainActivity.c(您的光标对象)时,将为您设置正确的行。但是,这要求您始终调用moveToPosition
我还想提出一些其他提示。您应该为布局对象使用不同的命名约定。使用名称,名称1,标记,标记等变量将导致混淆。而是使用name,nameText或marksString,marksTextView。
同样对于您的数据库查询,您应该使用query()方法。而不是:
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+docno.getText()+"'", null);
使用:
c=db.query("student","rollno="+docno.getText.toString(),null,null,null,null,null);
这也假设您已宣布&#39; c&#39;作为光标已经如上所述。您也无法保证您的列将完全符合您的预期,因此不使用
c.getString(0)
要检索第0列,而应使用:
c.getString(c.getColumnIndex("columnName");
其中&#39; columnName&#39;是表中列的名称。