2012-01-24 31 views
0

我在android.During做小本申請,我有遭受這樣的問題:android系統中獲取下一個值使用SQLite

我搜索使用「」然後在關鍵字我在清單中使用這個來的ListView碼。

nameList.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      try { 
       Intent intent = new Intent(Search.this, 
         SearchDetails.class); 
       /* 
       * Cursor cursor = (Cursor) adapter.getItem(position); 
       * intent.putExtra("JOK_ID", 
       * cursor.getInt(cursor.getColumnIndex("_id"))); 
       */ 
       intent.putExtra("id", id); 
       intent.putExtra("position", position); 
       Log.d(TAG, " I.." + id); 
       Log.d(TAG, " P.." + position); 
       startActivity(intent); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

例如像這樣enter image description here

現在,如果我點擊oham然後顯示就像這樣:enter image description here

最後,我想,如果我點擊後退按鈕則顯示約翰 and Next to display krackohm。並計算搜索名稱的總數。 我嘗試下一個按鈕的代碼:

 Cursor cursor = db.rawQuery("SELECT _id, name FROM std WHERE _id = ?", 
       new String[]{""+Id}); 

     if (cursor.getCount() == 1) 
     { 
      cursor.moveToFirst(); 

      ...body 

     } 

編輯:

這是第一次,當任何列表項的點擊,上創建

private void dislpayFirstName() { // this is display first time click list item 
    writeDatabase(); 
    cursor = db.rawQuery("SELECT _id, name FROM std WHERE._id = ?", 
      new String[]{""+Id}); 

     if (cursor.getCount()> 0) 

     { 
     cursor.moveToFirst(); 
     nameDetails(); 
     } 
} 

這是接下來的程序代碼按鈕點擊:

 position++; 
     writeDatabase(); 
     cursor = db.rawQuery("SELECT _id,name FROM std", null); 
     if (cursor.getCount()> 0) 
     { 
      cursor.moveToPosition(position); 
      //cursor.moveToNext(); 
     nameDetails();     
     } 

在下一個按鈕中:如果cursor.moveToPosition(position);然後下一個名稱顯示匹配位置和表格ID。意思是位置2,然後在表格中顯示2個數字名稱。

在下一個按鈕:如果cursor.moveToNext();然後下一個名稱顯示table.Means 0表中的id開始。

回答

0

先放cursor.moveToFirst();。我的意思是把它放在這樣的..

cursor.moveToFirst(); 
if(your condition) 
{ 

} 
+1

這其實並不重要,他只是檢查,如果遊標包含記錄或不... – Hiral

+0

你想顯示rexord像NEXT PREVIOUS? – Akash

+0

@手稿,我同意你的意見。 –

0

而不是使用id作爲額外的意圖,你應該使用列表中的項目的位置。

該位置將與光標中相同記錄的位置相似,因此您只需將光標移動到該位置並從相同位置獲取所需的細節。然後,您可以在活動中顯示它,因爲您已在第二個活動視圖中顯示。

所以在你的SearchDetails。類,你需要做的:

... 
    int position=getIntent.getIntExtra("position",999); // 999 is default value 
    Cursor cursor = db.rawQuery(<query which you fired for populating search results in previous activity>);  
    if (cursor.getCount()> 0 && position!=999){ 

     cursor.moveToPosition(position);  
     ...body // fetch details and display it. 
    } 
    backButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

       position--; 
       //display details code 
       Cursor cursor = db.rawQuery(<query which you fired for populating search results in previous activity>);  
       if (cursor.getCount()> 0 && position!=-1){ 

        cursor.moveToPosition(position);  
        ...body // fetch details and display it. 
       } 
     } 
    } 
    nextButton.setOnClickListener(new OnClickListener() {     
     @Override 
     public void onClick(View arg0) { 

       position++; 
       //display details code 
       Cursor cursor = db.rawQuery(<query which you fired for populating search results in previous activity>);  
       if (cursor.getCount()> 0 && position!=cursor.getCount()){ 

        cursor.moveToPosition(position)  
        ...body // fetch details and display it. 
       } 
     } 
} 
... 

編輯:

修改後的代碼:(重複代碼中刪除)

... 
     int position=getIntent.getIntExtra("position",999); // 999 is default value 
     Cursor cursor = db.rawQuery(<query which you fired for populating search results in previous activity>);   
     if (cursor.getCount()> 0 && position!=999){ 

      cursor.moveToPosition(position);   
      ...body // fetch details and display it. 
     } 
     backButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 

        position--;  
        if (position!=-1){ 

         cursor.moveToPosition(position);   
         ...body // fetch details and display it. 
        } 
     } 
     nextButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 

        position++;      
        if (position!=cursor.getCount()){ 

         cursor.moveToPosition(position)   
         ...body // fetch details and display it. 
        } 
      } 
    } 
    ... 
+0

cursor.moveTo(position);可能是這行錯了,檢查它。 –

+0

對不起,這是一個錯誤。請檢查我編輯的答案。請按照編輯下的「編輯:」 – Hiral

+0

第一次點擊任何列表項目是可以的,但如果我點擊下一個然後不顯示下一個名稱根據列出。如果我點擊next,那麼位置可能是5,然後根據數據庫表而不是列表顯示id 5。檢查我的編輯問題。 –

1

你要做這樣的:

Cursor cursor = db.rawQuery("SELECT _id, name FROM std") // get all rows 

比,爲您顯示第一個輸入:

cursor.moveToFirst(); 
displayData(); // Method to display the data from the cursor on screen 

你點擊「下一步」按鈕:

if (cursor.moveToNext()){ // moveToNext returns true if there is a next row 
displayData();} 

,同樣:你的「上一個」按鈕使用cursor.moveToPrevious()

+0

你正在談論整個數據庫名爲std,它的好 - 它的工作正常,但我說的搜索項目意味着選定items.So如何使用搜索項目使用this.Cursor cursor = db.rawQuery(「SELECT _id, name FROM std where name =「john」);這個名爲john的id是>> 5,8,12,13。所以如何顯示這個。 –

+0

完全像你說的:「SELECT _id,name FROM std WHERE name = \」 john \「」。比你的Cursor的所有行都有name =「john」。通過moveToNext或moveToFirst你可以在行之間移動。 – Thommy