如何通过ListView,Android - Java传递数据

时间:2013-08-27 10:59:37

标签: java android json android-listview

我再次陷入困境..我已经在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()”中访问它?实现我想要做的最好的方法是什么?

此致

丹尼尔

2 个答案:

答案 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,它们易于使用并为我们工作。

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