HashMap 上的 SimpleAdapter 无法正常工作
SimpleAdapter on HashMap does not work properly
我有一个 JSON 这样的:
[{"message":"Hello","id":1,"name":"Hello"},{"message":"James","id":2,"name":"Smith"}]
我用它来填充 ArrayList<HashMap<String, String>>
,以便将 json 的项目显示到 ListView 中。
这是我目前使用的代码:
private void createListView(){
for(int i = 0 ; i < json.length() ; i++){
try{
JSONObject temp = json.getJSONObject(i);
HashMap<String, String> map = new HashMap<>();
map.put("name", temp.getString("name"));
map.put("message", temp.getString("message"));
data.add(map);
}catch (JSONException e){
e.printStackTrace();
}
}
String[] from = new String[]{"name", "message"};
int to[] = new int[]{android.R.id.text1};
ListAdapter adapter = new SimpleAdapter(getBaseContext(), data, android.R.layout.simple_list_item_1, from, to);
setListAdapter(adapter);
Log.d("Debug", json.toString());
}
这段代码几乎可以工作,但不是我想要的方式。它仅显示 name 字段。
我如何修改它才能同时显示 message 和 name 字段?
It display only the message field.
因为使用 android.R.layout.simple_list_item_1
作为仅包含在具有 android.R.id.text1
id
的 TextView 上的行
How can I modify it in order to display both the message and name
field ?
使用 android.R.layout.simple_list_item_2
作为行的布局并更改 to
数组:
int to[] = new int[]{android.R.id.text1,android.R.id.text2};
这一行有错误
int to[] = new int[]{android.R.id.text1};
这里你只提到了一个控件。我想那是为了留言。您需要为 Name
.
添加另一个控件
使用"android.R.layout.simple_list_item_2"代替"android.R.layout.simple_list_item_1"
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_2,
mCursor, // Pass in the cursor to bind to.
new String[] {People.NAME, People.COMPANY}, // Array of cursor columns to bind to.
new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns.
// Bind to our new adapter.
setListAdapter(adapter);
SimpleAdapter playlistadapter = new SimpleAdapter(getActivity().getApplicationContext(), songsList, R.layout.file_view,
new String[] { "songTitle","songAlbum", "songartist","songPath" }, new int[] { R.id.checkTextView, R.id.text2, R.id.text3, R.id.text4 });
playlistadapter.setViewBinder(new SimpleAdapter.ViewBinder(){
boolean setViewValue(View view, Object data, String textRepresentation){
if(view.getId () == R.id.songartist){
view.setText("("+textRepresentation+")");
}
}
});
更改此行
int to[] = new int[]{android.R.id.text1};
至
int to[] = new int[]{android.R.id.text1,android.R.id.text2};
希望对您有所帮助。
我有一个 JSON 这样的:
[{"message":"Hello","id":1,"name":"Hello"},{"message":"James","id":2,"name":"Smith"}]
我用它来填充 ArrayList<HashMap<String, String>>
,以便将 json 的项目显示到 ListView 中。
这是我目前使用的代码:
private void createListView(){
for(int i = 0 ; i < json.length() ; i++){
try{
JSONObject temp = json.getJSONObject(i);
HashMap<String, String> map = new HashMap<>();
map.put("name", temp.getString("name"));
map.put("message", temp.getString("message"));
data.add(map);
}catch (JSONException e){
e.printStackTrace();
}
}
String[] from = new String[]{"name", "message"};
int to[] = new int[]{android.R.id.text1};
ListAdapter adapter = new SimpleAdapter(getBaseContext(), data, android.R.layout.simple_list_item_1, from, to);
setListAdapter(adapter);
Log.d("Debug", json.toString());
}
这段代码几乎可以工作,但不是我想要的方式。它仅显示 name 字段。
我如何修改它才能同时显示 message 和 name 字段?
It display only the message field.
因为使用 android.R.layout.simple_list_item_1
作为仅包含在具有 android.R.id.text1
id
How can I modify it in order to display both the message and name field ?
使用 android.R.layout.simple_list_item_2
作为行的布局并更改 to
数组:
int to[] = new int[]{android.R.id.text1,android.R.id.text2};
这一行有错误
int to[] = new int[]{android.R.id.text1};
这里你只提到了一个控件。我想那是为了留言。您需要为 Name
.
使用"android.R.layout.simple_list_item_2"代替"android.R.layout.simple_list_item_1"
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_2,
mCursor, // Pass in the cursor to bind to.
new String[] {People.NAME, People.COMPANY}, // Array of cursor columns to bind to.
new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns.
// Bind to our new adapter.
setListAdapter(adapter);
SimpleAdapter playlistadapter = new SimpleAdapter(getActivity().getApplicationContext(), songsList, R.layout.file_view,
new String[] { "songTitle","songAlbum", "songartist","songPath" }, new int[] { R.id.checkTextView, R.id.text2, R.id.text3, R.id.text4 });
playlistadapter.setViewBinder(new SimpleAdapter.ViewBinder(){
boolean setViewValue(View view, Object data, String textRepresentation){
if(view.getId () == R.id.songartist){
view.setText("("+textRepresentation+")");
}
}
});
更改此行
int to[] = new int[]{android.R.id.text1};
至
int to[] = new int[]{android.R.id.text1,android.R.id.text2};
希望对您有所帮助。