使用HashMap使用Custom desjgn填充ListView

时间:2015-05-23 15:09:03

标签: java android listview android-listview custom-lists

我在MyBets活动中有一个ListView。下面的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>

我还在活动SingleBet中为此ListView提供了自定义布局。下面的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

我使用以下代码来获取我想要添加的团队和选择变量。

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

我的问题是如何填充列表视图,以便名称和选择显示团队和选择。我从一个名为AllGameslist的单独类中调用此方法。

2 个答案:

答案 0 :(得分:0)

声明一个扩展适配器的类。在inflater的帮助下定义自定义视图,然后在Map / List的帮助下设置要从活动/片段传递到适配器类的任何值(如果迭代)。

答案 1 :(得分:0)

假设您正在以json格式检索用户的详细信息,例如[{&#34;用户名&#34;:&#34; StackOverflow&#34;,&#34;密码&#34;:&#34; xxxxxx& #34;,&#34;已创建&#34;:&#34; 08 Apr 02:30 PM PM&#34;,&#34; id&#34;:&#34; 15014&#34;},{&# 34;用户名&#34;:&#34; StackExchange&#34;,&#34;密码&#34;:&#34; xxxxxxxx&#34;,&#34;创建&#34;:&#34; 09年4月9日:2015年12月30日&#34;,&#34; id&#34;:&#34; 15015&#34;}] 现在,您想要在列表视图中显示它。 1)提取这个json并在像user.setName这样的bean中设置这个值(jsonObject.getString(&#34; name&#34;));等等。然后将该对象添加到ArrayList list.add(user)中。 2)迭代完所有数据项并在最后一次填充后将列表传递给已定义的适配器。 3)在适配器中,在getView()方法中以您希望的方式设置listview项并显示给用户。您还可以为用户选择的项目实现onItemClick。 如需进一步参考:https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView