我有一个简单的应用程序结构,只需下载一些mysql数据并将其显示到列表视图中。代码片段显示了我正在做的事情。
public class MyActivity extends Activity implements AdapterView.OnItemClickListener {
private static final String TAG = "centrActivity";
ListView listView;
ArrayList<String> randomCentr;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parseJson();
ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, randomTorgCentr);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_NONE);
listView.setOnItemClickListener(this);
}
private ArrayList<String> parseJson() {
randomCentr = new ArrayList<String>();
JSONArray centr = null;
//url
String url = "";
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = jsonParser.getJSONFromUrl(url);
Log.i(TAG, jsonObject.toString());
try {
torgCentr = jsonObject.getJSONArray("callback");
Log.i(TAG, torgCentr.toString());
for (int i=0; i<torgCentr.length(); i++) {
JSONObject o = torgCentr.getJSONObject(i);
String id = o.getString("id");
String name = o.getString("name");
randomCentr.add(i, name);
Log.i(TAG, randomTorgCentr.get(i));
}
} catch (JSONException e) {
e.printStackTrace();
}
return randomTorgCentr;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i(TAG, randomCentr.get(position));
}
}
一切都在显示,但我遇到了问题。我有通过id连接到这个表的表。我在列表中只有表的名称属性。那么,如何从json文件中为每个元素指定它的id,所以我可以根据元素的id创建一个新的请求并显示元素的详细数据?
答案 0 :(得分:3)
而不是ArrayList
使用HashMap
。在HashMap中,您可以存储键值对。因此,在您的情况下,您可以相应地存储ID及其数据
答案 1 :(得分:1)
我建议您为数据创建一个模型并扩展BaseAdapter
并创建映射到它的模型集合。另一种选择是创建一个简单的Map
并将索引作为键,将id作为值。但我建议你选择第一个选项。