使用来自另一个类的数据填充类的textview

时间:2012-04-01 06:25:23

标签: android

我已经开发了一些短信应用程序,我无法弄清楚如何解决这个问题...在一个布局中我显示两个文本视图来显示短信的数量和日期......这很好..

但是现在我正在实现onListItemClick,我希望在单击列表项时,来自数据库的整个消息应该加载到新视图中......如何实现...

protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);


        dba.open();

        Cursor c=dba.executeQuery("select rowid _id,* from messages where rowid="+position+";");
        Log.v(tag, "value count"+ c.getCount());
        if(c.getCount()>0)
        {
            Log.v(tag, "value count"+c.getCount());
            c.moveToPosition(position);
                Intent intent = new Intent();

                String mesage = c.getString(c.getColumnIndex("msg"));

                Log.v("Value passed to class", mesage);
                intent.putExtra(name, mesage);

            intent.setClass(this, NewInterface.class);
            startActivity(intent);


        }

    }

这是我传递数据的另一个类的代码。

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.messages);
        tv4 = (TextView) findViewById(R.id.tvMessages);
        Bundle bundle=getIntent().getExtras();
        if(bundle!=null)
        {
            Log.v("Value got from class", bundle.getString("name"));
            tv4.setText(bundle.getString("name"));
        }

列表视图通过此方法从包含电话号码的数据库填充....

private void openAndQueryDatabase(){

    newDB=new DBAdapter(this);

    try {

        newDB.open();
        Cursor c = newDB.executeQuery("select distinct nm,rowid _id from messages");

        if (c != null ) {

            if  (c.moveToFirst()) 
                Log.v(tag, "Stage 1");{
                do {

                    String firstName = c.getString(c.getColumnIndex("nm"));
                    Log.v(tag, firstName);
                //  String date = c.getString(c.getColumnIndex("dt"));

                    results.add(firstName);


                }while (c.moveToNext());
                Log.v(tag, "Stage 1");
            } 
        }           

1 个答案:

答案 0 :(得分:1)

单击“列表”项后,您将打开数据库以根据单击的位置获取数据。而不是尝试读取整个数据的第一个Activity,为什么不直接使用Intent将int位置传递给下一个Activity,然后在那里进行数据库查询。这将更容易,更有意义。如果您仍想传递wholde数据,请使用类似于以下代码的代码(替换if(c.getCount>0)块):

 ArrayList<String> arrayList ;

            Cursor c=null;
            if(c.moveToFirst()){
                int x= c.getCount();
                int  y =c.getColumnIndex("msg");
            arrayList = new ArrayList<String>(x);
                for(int a=0;a<x;a++){
c.moveToPosition(a);                    
arrayList.add(c.getString(y));

                }
                  Intent intent = new Intent(this,NewInterface.class);
                intent.putStringArrayListExtra("msgs",arrayList );
            startActivity(intent);
            }

从您单击的ListView行的其中一个textView中获取数字:

TextView tv1=(TextView)v.findViewbyId(R.id.number)//Replace this with id of tv displaying numbers
String number = tv1.getText().toString();

在onListItemClick中添加这些行,然后在查询中使用此数字。