0

顧客リストを作成しました。クリックすると、編集ビューが開き、顧客を編集できます。ここで、パラメーターは、データベースに格納されている行の _id を渡す必要があります。しかし、リスト内の位置を渡すたびに。そのため、編集ビューは間違ったデータを開いています。助けてください。

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + id);
            customerEdit(customerEditUri);
        }
    });

回答: ありがとうございました。あなたのコメントは、これを解決するのに役立ちました。CustomerObject クラス内に次の関数を作成しました。

@Override
    public String toString() {
        return this.name;
    }

その後、次のようなアクティビティで CustomerObject の配列を作成しました。

List<CustomerObject> customers = new ArrayList<CustomerObject>();

次のようにして ArrayAdapter を作成しました。

adapter = new ArrayAdapter<CustomerObject>(this, R.layout.list, R.id.customer_name, customers);

最後に、次のように setOnItemClickListener() を呼び出します。

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            CustomerObject custObj = adapter.getItem(position);
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + custObj.pkid);
            customerEdit(customerEditUri);
        }
    });
4

4 に答える 4

1

データをListViewにバインドするために使用したリストビューアダプターであるアダプターに返すIDを設定する必要があります。

私が間違っていなければ、メソッドは次のメソッド名の下のアダプター クラスにあります。

public long getItemId(int position) {
  return myitem[position].getId();
}

適切な ID を返すと、必要な結果が得られます。

于 2013-02-20T04:44:37.280 に答える
0

「長いID」はレコードIDではなく、内部で生成されたビューIDだと思います。

データソース ID に戻りたい場合は、位置などを使用する必要があります。

// Assuming datasource is an ArrayAdapter<Customer>
Customer customer = customerAdapter.getItemAtPosition(position);

// then you can do
Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + customer.getId());
customerEdit(customerEditUri);
于 2013-02-20T04:44:09.607 に答える
0

に置き換えidますposition

使用する

 lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + position);
            customerEdit(customerEditUri);
        }
    })
于 2013-02-20T04:56:46.090 に答える
0

私の意見では、位置を通じて、アダプターの getItem(position) で行アイテムを取得できます。したがって、位置はアダプター内のデータ位置を意味します。

id パラメーターについては、ヘルプ メソッドだと思います。ご存知のように、アダプター内のデータは常にレコーダーです。一般的に言えば、レコーダーには id 列 (データベース ID のようなもの) が必要です。コーディング時に、位置からアイテムを取得してから、アイテムの ID を取得できます (アイテムに ID がある場合)。ただし、「id」パラメーターを使用して、そのような「id」を直接取得できます。

ちなみに、id パラメータを使いたい場合は、アダプタに getItemId() メソッドを実装する必要があります。ArrayAdapter のデフォルトの実装は、位置を返すだけです。

于 2013-12-11T02:46:46.007 に答える