Как настроить данные для просмотра расширяемого списка?

Я попытался добавить расширяемый список для своего приложения. Этот список включает заголовок и подсписок.

для списка данные загружаются с помощью веб-службы.

я использовал ссылку Android Expandable List View Tutorial для разработки это.

я успешно загрузил список заголовков. но дело в том, что подсписок включает все данные в списке массивов. я хочу загрузить только то, что связано с заголовком.

например: он отображает название отеля и все подробности об отелях, снова название отеля и все подробности об отелях.

Он успешно загружает данные через веб-сервис. я просто хочу обработать список массивов.

Это код, который я использовал.

    public void ListDrwaer() {

        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();
        List<String> restData = new ArrayList<String>();

        try {
            JSONObject jsonResponse = new JSONObject(strJson1);
            JSONArray jsonMainNode = jsonResponse.optJSONArray("restaurants");

            for (int i = 0; i < jsonMainNode.length(); i++) {

                JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
                String restName = jsonChildNode.optString("name");
                String address = jsonChildNode.optString("address");
                String mobile = jsonChildNode.optString("mobile");
                String direction = jsonChildNode.optString("direction");
                String bestTime = jsonChildNode.optString("bestTime");
                String food = jsonChildNode.optString("food");
                String dress = jsonChildNode.optString("dress");
                String priceRange = jsonChildNode.optString("priceRange");

                listDataHeader.add(restName);

                restData.add(address);
                restData.add(mobile);
                restData.add(direction);
                restData.add(bestTime);
                restData.add(food);
                restData.add(dress);
                restData.add(priceRange);

                listDataChild.put(listDataHeader.get(i), restData);
            }

        } catch (JSONException e) {
            Toast.makeText(getApplicationContext(), "Error..." + e.toString(),
                    Toast.LENGTH_LONG).show();
        }

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        expListView.setAdapter(listAdapter);

    }

Может кто-нибудь помочь мне?


person anuruddhika    schedule 04.01.2014    source источник


Ответы (4)


Вам нужно создать новый restData для каждого элемента в вашем цикле for, иначе он сохранит ссылку на один и тот же для каждого элемента:

public void ListDrwaer() {

    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();

    try {
        JSONObject jsonResponse = new JSONObject(strJson1);
        JSONArray jsonMainNode = jsonResponse.optJSONArray("restaurants");

        for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            String restName = jsonChildNode.optString("name");
            String address = jsonChildNode.optString("address");
            String mobile = jsonChildNode.optString("mobile");
            String direction = jsonChildNode.optString("direction");
            String bestTime = jsonChildNode.optString("bestTime");
            String food = jsonChildNode.optString("food");
            String dress = jsonChildNode.optString("dress");
            String priceRange = jsonChildNode.optString("priceRange");

            List<String> restData = new ArrayList<String>();
            restData.add(address);
            restData.add(mobile);
            restData.add(direction);
            restData.add(bestTime);
            restData.add(food);
            restData.add(dress);
            restData.add(priceRange);

            listDataHeader.add(restName);
            listDataChild.put(restName, restData);
        }

    } catch (JSONException e) {
        Toast.makeText(getApplicationContext(), "Error..." + e.toString(),
                Toast.LENGTH_LONG).show();
    }

    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

    expListView.setAdapter(listAdapter);

}
person sddamico    schedule 04.01.2014

здесь пример списка Exapndable. , обратитесь к нему.

попробуйте эту демо

там вы можете увидеть, как установить ArrayList в другой binClass.

person Sanket Kachhela    schedule 04.01.2014
comment
Я использовал androidhive.info/2013/07/android- Expandable-list-view-tutorial для разработки. это также как ваш пример. В обоих примерах указано, как добавить список вручную. - person anuruddhika; 04.01.2014

Попробуй это:

    // Adding child data
    listDataHeader.add("Top 250");
    listDataHeader.add("Now Showing");
    listDataHeader.add("Coming Soon..");

    // Adding child data
    List<String> top250 = new ArrayList<String>();
    top250.add("The Shawshank Redemption");
    top250.add("The Godfather");
    top250.add("The Godfather: Part II");
    top250.add("Pulp Fiction");
    top250.add("The Good, the Bad and the Ugly");
    top250.add("The Dark Knight");
    top250.add("12 Angry Men");

    List<String> nowShowing = new ArrayList<String>();
    nowShowing.add("The Conjuring");
    nowShowing.add("Despicable Me 2");
    nowShowing.add("Turbo");
    nowShowing.add("Grown Ups 2");
    nowShowing.add("Red 2");
    nowShowing.add("The Wolverine");

    List<String> comingSoon = new ArrayList<String>();
    comingSoon.add("2 Guns");
    comingSoon.add("The Smurfs 2");
    comingSoon.add("The Spectacular Now");
    comingSoon.add("The Canyons");
    comingSoon.add("Europa Report");

    listDataChild.put(listDataHeader.get(0), top250); // Header, Child data
    listDataChild.put(listDataHeader.get(1), nowShowing);
    listDataChild.put(listDataHeader.get(2), comingSoon);
person user3021522    schedule 04.01.2014
comment
Нет дорогой. я загружаю эти данные из API, JSON. поэтому я не могу добавить, как это. - person anuruddhika; 04.01.2014

Вы можете использовать ArrayList, как показано ниже:

ArrayList<String> groupItem = new ArrayList<String>();
ArrayList<Object> childItem = new ArrayList<Object>();

использовать парсинг JSON. Это будет работать для вас. Я могу дать вам только логику.

person user3021522    schedule 04.01.2014