如何使用不同的数据调用相同的活动(相同的布局)?

时间:2011-09-05 07:39:13

标签: android android-activity android-intent

我是android领域的新手。我正在开发餐厅菜单应用程序,我创建了列表视图,显示了餐厅的项目名称。当我在列表视图中选择任何一个项目时,它将启动另一个活动,它包含显示所选项目的详细描述的文本视图字段。同样,当我选择其他项目时,它应该启动相同的活动,但数据应该是所选项目,如何实现这一目标?如果我使用sqlite数据库作为数据源。

4 个答案:

答案 0 :(得分:2)

您需要传递onItemClick:

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

如果您想从被调用的Activity返回一些数据,那么您可以使用startActivityForResult()作为:

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

在被叫活动中,您可以将数据设置为:

setResult(RESULT_OK, intent);

注意:在这里设置intent的值并将其传递给setResult()。

在返回调用Activity时,您可以通过覆盖来获取数据:

@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....
        }
    }

注意:您可以通过Intent传递原始数据类型值,如果要传递其他类型,则必须像这样使用Bundle。

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);

答案 1 :(得分:0)

使用intent extras来实现这一目标。 您可以使用intent.putExtra(“KEY”,VALUE)将数据传输到您的活动。 在接收活动中,您可以通过调用getIntent()获取额外内容.getExtras();它返回一个Bundle,其中包含你在调用活动中添加的额外内容。

答案 2 :(得分:0)

您需要使用Bundle附加内容 Intent,例如

假设您有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

答案 3 :(得分:0)

取决于您要实现的目标。假设您要发送列表视图项的位置,然后点击方法将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);


        }

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