2012-11-27 123 views
0

我有一个listView从SQLite数据库加载数据,现在我想实现一个onclicklistener到列表。当用户点击列表时,它应该将它们带到下一个活动并将相应的数据加载到TextView中。我的问题是,我将如何传递列表的数据,例如它是一个“主题”列表,并且用户点击主题“我的主页”。我想将主题“我的家”传递给下一个活动,以便我分别知道要检索哪些相应的数据。Android从SQLite数据库加载数据到下一个活动

我该怎么办?我是否将“提取”放到新的意图中?或者有另一种方式。下面是我的代码,它们显示列表视图部分:

ListView listContent = (ListView) findViewById(R.id.contentlist); 
     mySQLiteAdapter = new SQLiteAdapter(this); 
     mySQLiteAdapter.openToRead(); 

     Cursor cursor = mySQLiteAdapter.queueAll(); 
     startManagingCursor(cursor); 

     String[] from = new String[] { SQLiteAdapter.KEY_CONTENT }; 
     int[] to = new int[] { R.id.text }; 

     SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.listrow, cursor, from, to); 

     listContent.setAdapter(cursorAdapter); 

     mySQLiteAdapter.close(); 

     //Onclick ListView setlistener 
     listContent.setTextFilterEnabled(true); 
     listContent.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class); 
//    summaryIntent.putExtra("SummTopic", value); 
      } 
     }); 

编辑: 这部分是下一个活动。

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 

请帮助:

Intent i = getIntent(); 
     extraTopic = i.getStringExtra("SummTopic"); 

     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
     Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE + " WHERE topic = \" " + extraTopic + " \" " , null); 

     Integer cindex = allrows.getColumnIndex("topic"); 
     Integer cindex1 = allrows.getColumnIndex("text1"); 
     Integer cindex2 = allrows.getColumnIndex("text2"); 

我在从数据库中检索得到一个错误。

谢谢。

回答

1
 public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class); 
      Cursor c = (Cursor)parent.getItemAtPosition(position); 
      summaryIntent.putExtra("SummTopic", c.getString(c.getColumnIndex(SQLiteAdapter.KEY_CONTENT))); 
      startActivity(summaryIntent); 
     } 

,或者您可以通过idsummaryIntent.putExtra("SummTopicId", id);)以及“ask db”在下一个活动中为此主题编号

编辑:

protected void onCreate(Bundle savedInstanceState){ 
    Intent i = getIntent(); 
    String extraTopic = i.getStringExtra("SummTopic"); 
    //or long extraTopic = i.getLongExtra("SummTopic"); if you put id there (which is better) 
     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
    String[] args = new String[] { extraTopic }; 
    //or String[] args = new String[] { Long.toString(extraTopic) }; with id version 
     Cursor singleRow = mydb.rawQuery("SELECT * FROM "+ TABLE + " WHERE topic=?" , args); 
    //args is better then escaping special chars in query 
    //and it should be single row so we've changed var name :) 
    if(singleRow.moveToFirst()){ //we should do moveToFirst before we can use Cursor 
     Integer cindex = allrows.getColumnIndex("topic"); 
     Integer cindex1 = allrows.getColumnIndex("text1"); 
     Integer cindex2 = allrows.getColumnIndex("text2"); 
     //setup views and stuff .... 
    }else{ 
     Toast.makeText(this, "Oops we did not find topic, detail activity was closed", Toast.LENGTH_SHORT).show(); 
     finish(); 
    } 
} 
+0

嗨,这确实有帮助。谢谢。但在下一次活动检索时出现错误。你能否帮助我在编辑过的部分中引用我的代码。谢谢 – mellissa

+0

好的,我确实改变了我的回答 – Selvin

+0

这完美的作品。谢谢一堆! – mellissa

0

您可以使用意图。

Intent intent= new Intent(context,classname.class); 
intent.putExtra("name",string); 

您可以使用intent.getextra()将其获取到目标课程名称中。

+0

mellissa你解决了这个问题? – Subburaj

0

您使用后setContentView(...)你需要引用您的字符串,并获取文本,如...

EditText et = (EditText) findViewById(R.id.my_edit_text); 
String theText = et.getText().toString(); 

将它传递给你用一个Intent另一个活动。例如...

Intent i = new Intent(this, MyNewActivity.class); 
i.putExtra("text_label", theText); 
startActivity(i); 

在新的活动(in onCreate()),你得到的意向和检索字符串...

public class MyNewActivity extends Activity { 

    String uriString; 

    @Override 
    protected void onCreate(...) { 

     ... 

     Intent i = getIntent(); 
     uriString = i.getStringExtra("text_label"); 

    } 
} 

编辑:

得到字符串列表视图从您可以应用以下代码并获取ITEM字符串并将其传递给下一个活动:

listContent.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
    String ITEM=listContent.getItemAtPosition(position); 
       //Intent summaryIntent = new Intent(DocumentListActivity.this, // ViewDocumentActivity.class); 
//    summaryIntent.putExtra("SummTopic", value); 
      } 
     }); 
+0

如何从ListView中获取文本?也许我没有正确强调。我想获得属于ListView的“主题”。 – mellissa

+0

已编辑我的答案。经历它。 –

-1

我想你正在使用一个适配器来填充你的列表中的一些数据。所以,你需要重写的getItem(INT位置)方法在你的适配器:

@Override 
    public Object getItem(int position) { 
     //Note that return type should be the same you you use to initilise items oof the adapter. E.g. String or some custom Topic class 
     Object someObject = mObjects[position]; 

     return someObject;  
    } 

然后,你需要设置的项目点击收听到你列出

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Object someObject = adapterView.getItemAtPosition(i); 

       Intent i = new Intent(this, MyNewActivity.class); 
       i.putExtra("text_label", someObject.toString()); 
       startActivity(i); 
      } 
     }); 
+0

他正在使用CursorAdapter ...有没有必要重写getItem ... – Selvin

相关问题