列表视图的行中包含jsoup和2个textview的ListView

时间:2014-02-10 04:51:47

标签: android listview android-listview jsoup android-arrayadapter

想知道如何使用列表视图的每一行编写一个包含2个textview的列表视图。

我的行将具有如下的xml布局:

simple_list_item_1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView android:id="@+id/stat_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold"/>

<TextView
    android:id="@+id/stat_number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold"
    android:layout_below="@id/stat_name"/>


</LinearLayout>

我到目前为止的代码是:

public class PlayerActivity extends Activity {

public Elements name;
public Elements num;
public ArrayList<String> statName = new ArrayList<String>();
public ArrayList<String> statNum = new ArrayList<String>();
private ArrayAdapter<String> nameAdapter;
private ArrayAdapter<String> numAdapter;
private ListView lv;
String url = "http://www.futhead.com/14/players/141/andrea-pirlo/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.player);

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

    new Logo().execute();
    new statistics().execute();
    nameAdapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, R.id.stat_name,statName);
    numAdapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, R.id.stat_number,statNum);

}

private class statistics extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... arg) {
        Document document;
        try {
            document = Jsoup.connect(url).get();
            num = document.select("div#stats-base p");
            statNum.clear();
            for (Element element : num) {
                statNum.add(element.ownText());
            }
            name = document.select("div#stats-base span");
            statName.clear();
            for (Element element : name) {
                statName.add(element.ownText());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }
    @Override
    protected void onPostExecute(String result) {

        lv.setAdapter(nameAdapter);
        lv.setAdapter(numAdapter);
    }
}

我一开始使用普通的ArrayAdapter,直到我意识到它不支持一个textview,所以我想知道如何实现一个可以支持两个textview的数组适配器。

2 个答案:

答案 0 :(得分:1)

要实现此目的,您必须构建自定义适配器并为自定义行布局充气。使用ArrayAdapter将无效,因为

  

默认情况下,此类需要提供的资源ID引用   一个TextView。如果要使用更复杂的布局,请使用   构造函数也采用字段ID。该字段ID应该   在较大的布局资源中引用TextView。

转到此how-to-make-a-custom-arrayadapter-for-listview,我建议您谷歌寻找更好的替代方案来实施其他Adapters

答案 1 :(得分:0)

您必须为ListView定义一个自定义适配器(它将为“超级”实现扩展适配器类)。您可以指定布局并指定该自定义布局的每个组件,以根据您的要求显示数据。

要使适配器扩展:http://developer.android.com/reference/android/widget/Adapter.html

另外,请参阅以下内容:

http://www.vogella.com/tutorials/AndroidListView/article.html
http://www.learn-android-easily.com/2013/06/listview-with-custom-adapter.html
Displaying ArrayList items in ListView contains 2 textviews