2011-09-05 105 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); 


     } 

同样,如果你要发送的数据,必须相应工作

相关问题