我是android新手。我正在开发餐厅菜单应用程序,我创建了列表视图,显示餐厅中的物品名称。当我在列表视图中选择任何一个项目时,它将启动另一个活动,它包含显示所选项目的详细说明的文本视图字段。同样,当我选择其他项目时,它应该启动相同的活动,但数据应该是选定的项目,如何实现这一目标?如果我使用sqlite数据库的数据源。如何用不同的数据调用相同的活动(相同的布局)?
回答
你需要传递的价值观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);
使用intent extras来实现这一点。 您可以使用intent.putExtra(“KEY”,VALUE)将数据传输到您的活动。 在接收活动中,您可以通过调用getIntent()。getExtras();它会返回一个包含您在调用活动中添加的附加内容的Bundle。
你要使用额外的的Intent
Bundle
,例如
我们假设您有一个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
感谢您的回答!但我不明白什么剂量id包含,我们通过intent.putExtra()传递。剂量它包含选定列表行的长值。如果是,那么这个值将如何帮助从数据库中获取数据? – sagar
当使用'CursorAdapter'填充你的'ListView'时,你的SQLite数据库中已经有了一个ID列(例如主键)。 'onListItemClick'同时传入'position'(这对你的用例来说是无用的)和'id'--这是你用于CursorAdapter和你的SQLite数据库的相同的ID - 所以它非常适合看在细节活动中添加菜单项。 –
这是许多与Android数据库相关的类迫使您提供基于'BaseColumns._ID'的ID列的原因之一 - 这样,它们总是有一个主键来唯一标识每条记录并将其传递回您的代码如有必要。 –
取决于您想要达到的目标。假设您想要发送列表视图项目的位置,然后单击方法发送标识符到具有意图的活动
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);
}
同样,如果你要发送的数据,必须相应工作
- 1. 相同的布局和相同的onclicklisteners多个活动
- 2. ASP.Net MVC:使用不同的布局显示相同的数据
- 3. 我应该如何使用相同的布局创建活动?
- 4. 相同布局不同的内容html
- 5. setResult调用相同的活动,而不是调用父活动
- 6. 对两种不同的活动使用相同的布局是否可以?
- 7. 多个不同的调用相同的活动问题
- 8. 同一活动中的不同布局
- 9. 两个布局相同的同一活动
- 10. 如何在相同的活动回到以前的布局
- 11. TabHost并调用相同的活动
- 12. 使用相同数据延迟Ajax调用相同的URL
- 13. 使用2个布局进行相同的活动时出错
- 14. 对所有活动使用相同的景观布局
- 15. CakePHP的:使用相同的布局
- 16. 相同的布局,不同的内容使用瓷砖
- 17. 使用相同的recyclerview适配器与不同的布局
- 18. 单个滚动2个相同的布局在不同的div?
- 19. FragmentStatePagerAdapter,相同片段,不同布局
- 20. 不同的活动或同样的活动,但不同的布局
- 21. 如何切换到不同的布局,并使用他们的android中的相同活动的小部件?
- 22. 相同的查询,相同的数据库,不同的结果
- 23. php,相同的数据,相同的计算,不同的结果
- 24. Rails不同设计邮差布局的相同动作
- 25. 不同的JNI调用的相同参数是否具有相同的值?
- 26. 如何为不同的bean重用相同的数据表?
- 27. 如何用不同的名称调用相同的程序?
- 28. 在不同的活动中使用相同的'OnClickListener'
- 29. 如何在Android中的不同布局中使用相同的UI实例
- 30. 如何针对相同尺寸的类别设备使用不同的布局?
感谢乌拉圭回合的答案! – sagar
非常清楚的解释!谢谢。 –