【问题标题】:Relate data and ListView in Android在Android中关联数据和ListView
【发布时间】:2014-02-14 15:29:11
【问题描述】:

我的情况是这样的:

在我看来 Highscore_zeigen 我有一个 ArrayList<Rangliste> 我想展示。整个事情都在一个试图从 URL 获取 JSON 数据的线程的onPostExecute 中。

    ArrayList<String> gewinnernamen = new ArrayList<String>();
    ArrayList<String> gewinnerdatum = new ArrayList<String>();
    Rangliste r = new Rangliste("","");
    ArrayList<Rangliste> rangliste = new ArrayList<Rangliste>();

....

@Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub

            if(isOnline() == true){


            System.out.println("HIHIHIHIHHIHI " +result);
            super.onPostExecute(result);
             JSONArray jsonarray = null;
            try {
                jsonarray = new JSONArray(result);
            } catch (JSONException e) {
                Toast.makeText(Highscore_zeigen.this, "Ups! Bitte überprüfe deine Netzwerkverbindung! ", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            } 




            String namest = "";
            String datumst ="";
            try {
                jb = (JSONObject) jsonarray.getJSONObject(0);
            } catch (JSONException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
            for(int i = 0; i <5;i++){

                try {
                    jb = (JSONObject) jsonarray.getJSONObject(i);

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                try {
                    namest = jb.getString("name");
                    datumst = jb.getString("datum");
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                gewinnernamen.add(i, namest);
                gewinnerdatum.add(i, datumst);





                adapter.notifyDataSetChanged();
            }


            for(int is = 0; is<5; is++){
                r = new Rangliste(gewinnernamen.get(is), gewinnerdatum.get(is));
                rangliste.add(r);
            }

所以我现在要显示的数据在rangliste 中。一切正常,但我不知道如何在ListView 中显示我的数据。 ListView 在 Highscore_zeigen 的布局文件中,我的行也有一个布局:

<ListView
    android:id="@+id/lvGewinner"
    android:paddingTop="40dp"
    android:paddingLeft="20dp"
    android:paddingBottom="30dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" >

</ListView>

这是我的布局:

<TextView
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:textStyle="bold"
    />

<TextView
    android:id="@+id/dist"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textSize="8dp"
    android:textStyle="italic"/>

所以我有数据,我有一个 ListView,我也有我的 ListView 的布局。我不知道如何连接这三件事,以便数据显示在我的 ListView 中。

【问题讨论】:

  • 所以你只想在屏幕上显示你的数据列表?
  • 作为我发布的给定布局的屏幕列表..

标签: android listview layout arraylist


【解决方案1】:

您需要使用 R.android.two_line_list_item,如下面的链接所述。 有示例的链接,但第二个答案解释得很好。

can any one provide me example of Two_line_list_item in Android?

编辑:

按照我的做法,我将创建对整个类可访问的 ListView 的引用(即,对 AsyncTask)。然后在 onPostExecute() 中:

    lv = (ListView) findViewById(R.id.lvGewinner);

    try {
        for(int i = 0; i <5;i++){
            ...
            namest = jb.getString("name");
            datumst = jb.getString("datum");
            ... 
            Rangliste[] ... // create your array
            ...
        }
        lv.setAdapter(new RanglisteArrayAdapter(this, rangliste);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

您可能需要将 JSON 转换为数组 这是您的适配器:

public class RanglisteArrayAdapter extends TwoLineArrayAdapter<Rangliste> {
    public RanglisteArrayAdapter(Context context, Rangliste[] rangliste) {
        super(context, rangliste);
    }

    @Override
    public String lineOneText(Rangliste r) {
        return r.namest;
    }

    @Override
    public String lineTwoText(Rngliste r) {
        return r.datumst;
    }
}

【讨论】:

  • 抱歉,我不知道在哪里调用此 SimpleAdapter 代码。可以举个例子吗?
  • YourAddapter 是什么?例子太多了,我真的失去了概述抱歉+...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多