如何将点击的项目数据传递给另一个活动

时间:2013-11-12 16:28:30

标签: android

我有todolist应用程序,它工作正常。我可以成功添加和编辑项目到列表视图。这是我的问题。当我点击项目时,项目的数据必须通过编辑活动,但现在它是空的,如添加新项目。可以做什么?

editItem.java

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_item);

    editText1 = (EditText) findViewById(R.id.editText1);
    spinner = (Spinner) findViewById(R.id.prioritySpinner);
    datePicker = (DatePicker) findViewById(R.id.datePicker);
    toggleButton = (ToggleButton) findViewById(R.id.statusbutton);
    editButton = (Button) findViewById(R.id.editButton);
    cancelButton = (Button) findViewById(R.id.cancelButton);

    editButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // ArrayList<String> b = new ArrayList<String>();

            task = editText1.getText().toString();
            priorityLevel = spinner.getSelectedItem().toString();
            status = toggleButton.getText().toString();

            int day = datePicker.getDayOfMonth();
            int month = datePicker.getMonth() + 1;
            int year = datePicker.getYear();

            date = day + "/" + month + "/" + year;

            itemList.setName(task);
            itemList.setPriorityLevel(priorityLevel);
            itemList.setStatus(status);
            itemList.setDueDate(date);

            Intent okIntent = new Intent();
            okIntent.putExtra("editItem", new DataWrapper(itemList));

            setResult(Activity.RESULT_OK, okIntent);
            finish();
        }
    });

2 个答案:

答案 0 :(得分:1)

您应该从Serializable接口

实现itemList类
public class ItemList implements Serializable {
// your class
}

然后在第一项活动中使用:

okIntent.putExtra("editItem", itemList);

在第二项活动中,获取意图数据:

ListItem listItem = (ListItem) getIntent().getSerializableExtra("editItem");

答案 1 :(得分:0)

开始编辑Activity时,您应该传递一些额外的编辑数据。

假设您的DataWrapper课程可以用作“额外”课程,那么它应该延伸ParcelableSerializable。 (最好使用Parcelable,因为更快,专为Android设计,当然Serializable可以使用,但我不建议使用它)

以下是向Activity开始Intent添加一些参数的示例:

Intent i = new Intent(getApplicationContext(), edititem.class);
i.putExtra("editdata",new DataWrapper(clickeditem));
startActivityForResult(i);

然后在edititem Activity中使用以下方式获取数据:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    //Edit mode
    DataWrapper value = extras.getParcelable("editdata"); //Or extras.getSerializable("editdata");
} else {
    //New mode
}

罗尔夫