0

JSONを使用して、「id」行と「firstname」行を含むmysqlテーブルのデータを解析し、listviewに「firstname」行を入力して正常に機能しています。しかし、onListItemClickを追加したいので、ユーザーがリストビューで名前をクリックすると、その名前の「id」値が別のクラスに転送される必要があります。これが私がリストビューに入力する方法です:

            JSONArray jArray = new JSONArray(result);
            JSONObject json_data = null;
            for (int i = 0; i < jArray.length(); i++) {
                json_data = jArray.getJSONObject(i);
                r.add(json_data.getString("firstname"));

            }

            dataAdapter = new ArrayAdapter<String>(Persons.this,
                    R.layout.person_row, r);
            ListView lv = (ListView) findViewById(android.R.id.list);
            lv.setAdapter(dataAdapter); 

これで「名」を他のクラスに転送できます。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Object o = this.getListAdapter().getItem(position);
    String FirstName = o.toString();
    Intent i = new Intent(this, PersonDetails.class);
    Bundle bandl = new Bundle();
    bandl.putString("fn", FirstName);
    i.putExtras(bandl);
    startActivity(i);

}

しかし、問題は、リストビューとonClickに「firstname」を表示して「id」のみを他のクラスに転送したいのですが、それがわかりません。「firstname」を他のクラスに転送してから、他のmysqlデータを取得することは、同じ名前の2人になるまで正常に機能したため、行「id」を転送する必要があります...

4

3 に答える 3

1

あなたへの簡単な短い答え

JsonArray アクセスできる場所を参照してくださいonListItemClick

したがって、次のことができます

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    String id = jArray. getJSONObject(position).getString("id");
    Intent i = new Intent(this, PersonDetails.class);
    Bundle bandl = new Bundle();
    bandl.putString("id",id);
    i.putExtras(bandl);
    startActivity(i);

}

アダプタを ID と名前の両方を保持できるものに変更することで、改善する必要があることに注意してください。そのため、JsonArray オブジェクトへの参照を保持する必要はありません。ここにあなたのためのチュートリアルがあります。

于 2012-12-06T14:36:40.250 に答える
1

最も簡単な方法は、id と firstName の 2 つの属性を持つカスタム クラス CustomPerson を作成することです。CustomPerson では、toString をオーバーライドして firstName を返します。

ArrayAdapter の作成:

// list should be a List<CustomPerson> and should be filled with your data
dataAdapter = new ArrayAdapter<CustomPerson>(Persons.this, R.layout.person_row, list);

OnListItemClick の実装 |:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    CustomPerson o = (CustomPerson) this.getListAdapter().getItem(position);
    long id = o.getId();
    // DO SOMETHING WITH the person's id

}
于 2012-12-06T14:37:46.583 に答える