2013-01-19 178 views
2

我有一个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. 
     }   
    } 

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

在此先感谢

+0

这是不是很清楚你问什么。 [你有什么尝试](http://whathaveyoutried.com),为什么它没有工作? – dokkaebi

+0

我已经改写过这个问题。 – Coder

+0

我明白了,你的'Save'活动有一个'EditText'或者一些编辑数据的方式吗? – dokkaebi

回答

1

你可以当你开始一个新的活动,意图一起发送额外数据。

@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设置结果代码。

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类的一个变量。

相关问题