2011-09-05 108 views
2

我是android新手。我正在開發餐廳菜單應用程序,我創建了列表視圖,顯示餐廳中的物品名稱。當我在列表視圖中選擇任何一個項目時,它將啓動另一個活動,它包含顯示所選項目的詳細說明的文本視圖字段。同樣,當我選擇其他項目時,它應該啓動相同的活動,但數據應該是選定的項目,如何實現這一目標?如果我使用sqlite數據庫的數據源。如何用不同的數據調用相同的活動(相同的佈局)?

回答

2

你需要傳遞的價值觀onItemClick:

Intent intent = new Intent(context, CalledActivity.class); 
     intent.putExtra(key, value); 
     startActivity(intent); 

如果你想要一些數據,從所謂的活動回來,那麼你可以使用startActivityForResult()爲:

Intent intent = new Intent(context, CalledActivity.class); 
     intent.putExtra(key, value); 
     startActivityForResult(intent, requestCode); 

在所謂的活動,你可以設置數據爲:

setResult(RESULT_OK, intent); 

注意:在這裏您設置意圖的值並將其傳遞給setResult()。

在返回返回到調用活動,你可以通過重寫得到的數據:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode == RESULT_OK){ 
      //Get data from Intent "data" and do your task here.... 
     } 
    } 

注意:您可以通過基本數據類型值直通意向,如果你想通過其他的類型,那麼你必須使用捆綁像這個。在活動

Bundle data = new Bundle(); 
     data.putIntArray(key, value); 

//same way you can set other values....... 
//Now set this Bundle value to Intent as you do for primitive type.... 

Intent intent = new Intent(context, CalledActivity.class); 
     intent.putExtra(data); 
     startActivity(intent); 

接收數據:

//For primitive values: 
DataType var_name = getIntent().getExtras().get(key); 

//For Bundle values: 
Bundle var_name = getIntent().getExtras().getBundle(key); 
+0

感謝烏拉圭回合的答案! – sagar

+0

非常清楚的解釋!謝謝。 –

0

使用intent extras來實現這一點。 您可以使用intent.putExtra(「KEY」,VALUE)將數據傳輸到您的活動。 在接收活動中,您可以通過調用getIntent()。getExtras();它會返回一個包含您在調用活動中添加的附加內容的Bundle。

0

你要使用額外IntentBundle,例如

我們假設您有一個MenuListActivity顯示菜單列表和MenuItemActivity其中更詳細顯示單個菜單項。

在你MenuListActivity.onListItemClick()要點擊的菜單項的ID傳遞到您的MenuItemActivity

public void onListItemClick(ListView list, final View view, int position, long id) { 
    final Intent intent = new Intent(this, MenuItemActivity.class); // from -> to 
    intent.putExtra(MenuItemActivity.ITEM_ID, id); // extra arguments: the menu item ID 
    startActivity(intent); 
} 

在你MenuItemActivity你必須恆定,以確定菜單項(以上使用):

public static final String ITEM_ID = "item_id"; 

... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle extras = getIntent().getExtras(); 
    long menuItemId = extras.getLong(ITEM_ID); 

    // fetch your menu item from database, using ID 
+0

感謝您的回答!但我不明白什麼劑量id包含,我們通過intent.putExtra()傳遞。劑量它包含選定列表行的長值。如果是,那麼這個值將如何幫助從數據庫中獲取數據? – sagar

+0

當使用'CursorAdapter'填充你的'ListView'時,你的SQLite數據庫中已經有了一個ID列(例如主鍵)。 'onListItemClick'同時傳入'position'(這對你的用例來說是無用的)和'id'--這是你用於CursorAdapter和你的SQLite數據庫的相同的ID - 所以它非常適合看在細節活動中添加菜單項。 –

+0

這是許多與Android數據庫相關的類迫使您提供基於'BaseColumns._ID'的ID列的原因之一 - 這樣,它們總是有一個主鍵來唯一標識每條記錄並將其傳遞迴您的代碼如有必要。 –

0

取決於您想要達到的目標。假設您想要發送列表視圖項目的位置,然後單擊方法發送標識符到具有意圖的活動

public void onItemClick(AdapterView<?> arg0, View view, int position, 
       long id) { 
      //listView.getItemIdAtPosition(position); 
      // TODO Auto-generated method stub 
      Intent i=new Intent(MyActivity.this,NewActivity.class); 
      i.putExtras("position",""+position); 
      startActivity(i); 


     } 

同樣,如果你要發送的數據,必須相應工作

相關問題