我尝试使用SimpleAdapter在ListView上显示标题。 我想做像this(图片)这样的事情。
修改: 我想按类别(不是标题)显示我的列表(" lugar"作为类别的文本)
注意:我没有使用" http://example.com/myjson.json"在我的真实代码中(仅用于发布)。
这是我的代码:
我的json文件内容:
{"json":[{"lugar":"lugar 1","lista":[{"id":"1","nombre":"nombre 1"},{"id":"2","nombre":"nombre 2"}]},{"lugar":"lugar 2","lista":[{"id":"1","nombre":"nombre 1"},{"id":"2","nombre":"nombre 2"}]}]}
Java代码:
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Espere...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JsonParser jParser = new JsonParser();
JSONObject json;
// Getting JSON from URL
json = jParser.getJSONFromUrl("http://example.com/myjson.json");
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
if(json != null) {
try {
// obtener arrays
JsonArr = json.getJSONArray("json");
for (int i = 0; i < JsonArr.length(); i++) {
JSONObject c = JsonArr.getJSONObject(i);
String lugar = c.getString("lugar");
JsonArr2 = JsonArr.getJSONObject(i).getJSONArray("lista");
for (int j = 0; j < JsonArr2.length(); j++) {
JSONObject d = JsonArr2.getJSONObject(j);
String id = d.getString("id");
String nombre = d.getString("nombre");
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put("id", id);
map.put("nombre", nombre);
oslist.add(map);
list = (ListView) getView().findViewById(R.id.lista);
ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
R.layout.list_item,
new String[]{"nombre"}, new int[]{
R.id.nombre});
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getActivity(), "You Clicked at " + oslist.get(+position).get("id"), Toast.LENGTH_SHORT).show();
}
});
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}else{
Toast.makeText(getActivity(), "json: null", Toast.LENGTH_SHORT).show();
}
}
lista_medios.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lista"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/abc_list_item_padding_horizontal_material">
</ListView>
</RelativeLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/nombre"
android:textSize="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
我需要做些什么来展示&#34; lugar&#34;作为类别文本和&#34; nombre&#34;对于物品?
答案 0 :(得分:0)
要给listview提供标题,我想你必须扩展listview而不是适配器。这样滚动时可以将其设置为动画。