Заполнение ListView пользовательским дизайном с использованием HashMap

У меня есть ListView в действии MyBets. XML-макет ниже:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background = "@color/grey05"
tools:context="com.example.betterapp.MyBets">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:orientation="vertical">
    <!-- Main ListView
         Always give id value as list(@android:id/list)
    -->
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:background = "@color/betcolor"
        android:layout_height="wrap_content"
></ListView>
</LinearLayout>
</RelativeLayout>

У меня также есть собственный макет для этого ListView в действии SingleBet. XML-макет ниже:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:background="#49DE56"
android:orientation="horizontal" >

<TextView
    android:id="@+id/namesofteams"
    android:layout_width="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:layout_weight="1.3"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Sevilla vs Barcelona"
    android:textStyle="bold" />


<TextView
    android:id="@+id/selection"
    android:layout_width="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="40dp"
    android:layout_weight="7"
    android:layout_height="wrap_content"
    android:textColor= "#585E5E"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Sevilla 3.55"
    android:textStyle="italic" />

<TextView
    android:id="@+id/statusofbet"
    android:layout_width="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_height="wrap_content"
    android:layout_weight="3"
    android:textColor="#000000"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Open"
    android:textStyle="bold" />


</LinearLayout>

Пользовательский макет должен выглядеть следующим образом:

Teams     Selection      Status
 A-B       A @ 2.3         Open

Я использовал следующий код для получения переменных Teams и Selection, которые я хотел бы добавить.

HashMap<Integer,Game> hashmapofgames = new HashMap<Integer, Game>();
        HashMap<Integer, Game> listofgames;
        listofgames = newBet.getlistofgames();
        for (Integer x : listofgames.keySet()) {
            TextView teams = (TextView) findViewById(R.id.textView2);
            String getTeams = listofgames.get(x).getTeams();
            teams.setText(getTeams);
            TextView selectionodds = (TextView) findViewById(R.id.textView3);
            String selectedoutcome = listofgames.get(x).getSelection();
            Double selectedoutcomeodds = listofgames.get(x).getSelectedOdds();
            String selectedteam = "";
            if (selectedoutcome == "home") {
                selectedteam = getTeams.substring(0, getTeams.lastIndexOf("-"));
            } else if (selectedoutcome == "draw") {
                selectedteam = "Draw";
            } else if (selectedoutcome == "away") {
                selectedteam = getTeams.substring(getTeams.lastIndexOf("-       ")+1,getTeams.length());
            }
            String selection = (selectedteam + " @" + selectedoutcomeodds);
            Log.d("teams",getTeams);
            Log.d("selected odds",Double.toString(selectedoutcomeodds));
            Log.d("selected team", selectedteam);
            Log.d("selected outcome", selectedoutcome);
            Log.d("selection", selection);

Это отлично работает, как показывает вывод из журнала:

 29523-29523/com.example.betterapp D/teams﹕     Villareal - Valencia
 29523-29523/com.example.betterapp D/selected odds﹕ 2.5
 29523-29523/com.example.betterapp D/selected team﹕ Valencia
 29523-29523/com.example.betterapp D/selected outcome﹕ away
 29523-29523/com.example.betterapp D/selection﹕ Valencia @2.5

Мой вопрос заключается в том, как заполнить список, чтобы namesofteams и selection отображали Teams и Selection. Я вызываю этот метод из отдельного класса AllGameslist.


person Alk    schedule 23.05.2015    source источник


Ответы (2)


Объявите класс, расширяющий адаптер. Определите пользовательский вид с помощью инфлятора, а затем установите, какое значение (при повторении), которое вы хотите установить, с помощью карты/списка, которое вы передаете из действия/фрагмента в класс адаптера.

person Jarvis    schedule 23.05.2015
comment
Не могли бы вы написать короткий код, чтобы продемонстрировать, как я это сделаю. - person Alk; 23.05.2015

Предположим, вы получаете сведения о своих пользователях в формате json, например [{"username":"StackOverflow","password":"xxxxxx","created":"08 Apr 02:30 2015 PM","id":" 15014"},{"имя пользователя":"StackExchange","пароль":"xxxxxxxx","создан":"09 апр 02:30 2015 2015 PM","id":"15015"}] Теперь вы хотите отображать это в виде списка. 1) Извлеките этот json и установите это значение в bean-компоненте, например user.setName(jsonObject.getString("name")); и так далее. Затем добавьте объект в список ArrayList.add(user). 2) После повторения всех элементов данных и их заполнения в последний раз передайте список адаптеру, который вы определили. 3) В адаптере в методе getView() установите элементы списка так, как вы хотите, и отобразите их пользователю. Вы также можете реализовать onItemClick для элемента, выбранного пользователем. Для дополнительной справки: https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView

person Jarvis    schedule 26.05.2015