1

我又被困住了。我在stackoverflow上阅读了大量的答案,这些答案触及了我想要实现的目标,但我一直无法解决我的问题。

我在 ListViews 上学习了教程,并得到了它的工作。但是,在我的应用程序中,我希望列表视图中的每一行都有一个不可见的参数来存储一个 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()”中访问它?实现我想要做的最好的方法是什么?

问候,

丹尼尔

4

2 回答 2

1

将 JSON 作为行视图的标记。稍后从方法 onItemClick(AdapterView parent, View view , int position, long id) 从 view 参数中获取标签,这是您的 JSON。

于 2013-08-27T11:28:27.167 回答
0

从您上面编写的代码中,最好只在其他 Activity 中以字符串形式获取数据,然后从中制作一个 JSONObject。

Intent anotherActivityIntent = new Intent(ShowListActivity.this, CollectionPointListActivity.class);
anotherActivityIntent.putExtra("object",jsonToPass.toString());
startActivity(anotherActivityIntent);

您已经在传递字符串内容。因此,在 CollectionPointListActivity 中获取字符串内容并从中创建一个 JSONObject,如下所示。

JSONObject jsonObj = new JSONObject(getIntent().getExtras().getString("object"));

这应该给你 JSONObj。

但理想情况下,您应该为您获得的响应创建模型类,并为模型类实现 Serializable,您将能够直接传递模型类对象。此外,还有可用的 Json 编组库,例如 JacksonJson 和 Gson,它们易于使用并为我们完成工作。

无论如何,我希望这可以帮助你。

于 2013-08-27T11:57:23.397 回答