如何通过单击表行开始新活动并将数据传递到EditText中的新活动

时间:2014-10-20 15:38:38

标签: android

以下是我的代码,我已经为每个表行设置了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();

                  }

2 个答案:

答案 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));
}

你甚至可以在o​​nClick上跳过通过意图的数据:

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;是表中列的名称。