我再次陷入困境..我已经在stackoverflow上阅读了大量的答案,触及了我想要实现的目标,但我一直无法解决我的问题。
我在ListViews上学习了this教程,并使其正常工作。但是在我的应用程序中,我希望listview中的每一行都有一个存储JSON对象的不可见参数,我可以将其传递给我想要在单击一行时推送的下一个视图。我的代码现在看起来像这样(在徒劳的尝试在列表中发送JSON之后)
private class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<List, Integer> mIdMap = new HashMap<List, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId,
List<String> objects, JSONObject jsonToAdd) {
super(context, textViewResourceId, objects);
/* for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
} */
JSONArray keyNames = null;
keyNames = jsonToAdd.names();
for (int i = 0; i < objects.size(); ++i) {
JSONObject tempJSON =null;
HashMap<String, String> tempHashMap = new HashMap<String, String>();
List<String> tempList = new ArrayList<String>();
try{
tempJSON = jsonToAdd.getJSONObject(keyNames.get(i).toString());
} catch (JSONException e){
System.out.println("error");
}
tempHashMap.put(objects.get(i),tempJSON.toString());
tempList.add(0, objects.get(i));
tempList.add(1,tempJSON.toString());
mIdMap.put(tempList, i);
}
}
@Override
public long getItemId(int position) {
List<String> itemList = new ArrayList<String>();
String item = getItem(position);
return position;//mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
这就是我称呼它的方式
final StableArrayAdapter adapter = new StableArrayAdapter(this,
android.R.layout.simple_list_item_1, listViewSource,forms);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
JSONObject forms = null;
JSONObject jsonToPass = null;
try {
List<String> stuff = (List)parent.getItemAtPosition(position);
forms = new JSONObject(stuff.get(1));
jsonToPass = forms.getJSONObject(keyNames.get(position).toString());
} catch (JSONException e) {
e.printStackTrace();
}
Intent anotherActivityIntent = new Intent(ShowListActivity.this, CollectionPointListActivity.class);
anotherActivityIntent.putExtra("object",jsonToPass.toString());
startActivity(anotherActivityIntent);
}
});
显然这不是这样做的方法,我如何从主类传递数据对象,以便我可以在“onItemClick()”中访问它?实现我想要做的最好的方法是什么?
此致
丹尼尔
答案 0 :(得分:1)
将JSON作为行视图的标记。稍后从方法onItemClick(AdapterView parent, View view ,int position,long id)获取view参数中的标记,这是你的JSON。
答案 1 :(得分:0)
从上面编写的代码中,最好只在其他Activity中以String形式获取数据,然后从中生成JSONObject。
Intent anotherActivityIntent = new Intent(ShowListActivity.this, CollectionPointListActivity.class);
anotherActivityIntent.putExtra("object",jsonToPass.toString());
startActivity(anotherActivityIntent);
您已经传递了字符串内容。因此,在CollectionPointListActivity中获取String内容并从中创建一个JSONObject,如下所示。
JSONObject jsonObj = new JSONObject(getIntent().getExtras().getString("object"));
这应该会给你JSONObj。
但理想情况下,您应该为您获得的响应创建模型类,并为模型类实现Serializable,并且您将能够直接传递模型类对象。此外,还有Json编组库,如JacksonJson和Gson,它们易于使用并为我们工作。
无论如何,我希望这会帮助你。