将数据从一个活动设置为另一个活动

时间:2013-01-19 03:04:59

标签: android android-intent

我有一个ListFragment,我想在列表视图中单击时编辑项目。

我正在使用这种方法。

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        if(dbHelper != null){
            Item item = dbHelper.getProjectRowById(id);
            Intent intent = new Intent(getActivity(), Save.class);
            //Here i want to start the activity and set the data using item.  
        }           
    }

如何在上述方法中设置数据。

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以在开始新活动时发送额外数据和Intent。

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    if(dbHelper != null){
        Item item = dbHelper.getProjectRowById(id);

        // Put the data on your intent.
        Intent intent = new Intent(getActivity(), Save.class);
        // If Item implements Serializable or Parcelable, you can just send the item:
        intent.putExtra("dataToEdit", item);
        // Otherwise, send the relevant bit:
        intent.putExtra("data1", item.getSomeDataItem());
        intent.putExtra("data2", item.getAnotherDataItem());
        // Or, send the id and look up the item to edit in the other activity.
        intent.putExtra("id", id);

        // Start your edit activity with the intent.
        getActivity().startActivity(intent);
    }
}

在编辑活动中,您可以获得启动它的Intent。

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

    setContentView(...);

    Intent intent = getIntent();
    if (intent.hasExtra("dataToEdit")) {
        Item item = (Item) intent.getSerializableExtra("dataToEdit");
        if (item != null) {
            // find edittext, and set text to the data that needs editing
        }
    }

}

然后用户可以编辑该文本,并在单击保存或其他任何内容时将其保存到数据库中。然后在保存活动上调用finish

如果您需要将保存的数据发送回原始活动(而不是仅仅在onStart中重新查询),请查看startActivityForResult。如果您使用它,则可以在调用finish之前使用setResult设置结果代码。

答案 1 :(得分:0)

使用

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    if(dbHelper != null){
        //don't do this here Item item = dbHelper.getProjectRowById(id);
        Intent intent = new Intent(getActivity(), Save.class);
        intent.putExtra("MyItemId", id);
    }           
}

在第二个活动中,您将获得Id并使用

加载元素
Bundle extras = getIntent().getExtras();
long id = extras.getInt("MyItemId");
Item item = dbHelper.getProjectRowById(id);

你也需要dbHelper。如果只想要一个实例,请将其作为App类的变量。