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

上記の方法でデータを設定するにはどうすればよいですか。

前もって感謝します

4

2 に答える 2

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

編集アクティビティでは、それを開始したインテントを取得できます。

@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)、を調べますstartActivityForResultsetResultこれを使用する場合は、を呼び出す前にで結果コードを設定できますfinish

于 2013-01-19T04:03:55.860 に答える
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);
    }           
}

2番目のアクティビティでは、IDを取得し、要素を次のようにロードします。

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

そこにもdbHelperが必要です。インスタンスを1つだけ必要な場合は、Appクラスの変数にします。

于 2013-01-19T04:05:14.737 に答える