如何在ListView中每行添加不同的图标

时间:2015-11-25 17:55:58

标签: android android-layout

我正在尝试使用Ken Burn效果here (his github page)的酷酷图书馆 我让它工作,但我不能在不同的行上添加不同的图标。我尝试使用Mkyongs CustomAdaptor示例,但他使用的是使用TextView和ImageView的布局。我正在使用的是ListView。我已经能够更改ListView的文本字体和大小,但丢失了尝试添加图标。你是怎么做到的?

以下是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:background="@drawable/blur4"
    tools:context="com.gio.hia.hiarewired.NoBoringActionBarActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent" />

    <FrameLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_height">

        <com.gio.hia.hiarewired.KenBurnsView
            android:id="@+id/header_picture"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/picture0" />

        <ImageView
            android:id="@+id/header_logo"
            android:layout_width="@dimen/header_logo_size"
            android:layout_height="@dimen/header_logo_size"
            android:layout_gravity="center"
            android:src="@drawable/ic_header_logo" />

    </FrameLayout>

</FrameLayout>

这是我的活动类

private void setupListView() {
    ArrayList<String> FAKES = new ArrayList<String>();
    //for (int i = 0; i < 1000; i++) {
        FAKES.add("Row 1");
    FAKES.add("Row 2");
    FAKES.add("Row 3");
    FAKES.add("Row 4");
    //}
    mPlaceHolderView = getLayoutInflater().inflate(R.layout.view_header_placeholder, mListView, false);
    mListView.addHeaderView(mPlaceHolderView);
    //mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FAKES));
    mListView.setAdapter(new ArrayAdapter<String>(this, R.layout.list_text_config, FAKES));
    mListView.setOnScrollListener(new AbsListView.OnScrollListener() { ...

我使用自定义的R.layout.list_text_config来更改字体

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:paddingTop="10dip"
    android:paddingBottom="10dip"
    android:paddingLeft="15dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="35dp"
    android:textColor="@color/colorWhite"/>

在他的例子中,他使用了布局inflater如何使用我的自定义适配器和布局充气器?或者我是否在错误的方向上查看问题?
我通常只是这样做

CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
    list=(ListView)findViewById(R.id.list);
    list.setAdapter(adapter);

但是当他使用下面的布局填充时我该怎么做

mPlaceHolderView = getLayoutInflater().inflate(R.layout.view_header_placeholder, mListView, false);
    mListView.addHeaderView(mPlaceHolderView);
    mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FAKES));

1 个答案:

答案 0 :(得分:1)

像@Arslan一样,这可以通过自定义适配器完成。你实际上是正确的

CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
    list=(ListView)findViewById(R.id.list);
    list.setAdapter(adapter);

这实际上创建了带有图标的列表。您需要添加的是mPlaceHolderView的标题图像,但不使用 mListView ,而是使用您使用&#34;自定义适配器创建的列表&#34; 。我从原始代码行放置了修改后的代码行,这样您就可以轻松看到差异。

    CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
    list=(ListView)findViewById(R.id.list);
    mPlaceHolderView = getLayoutInflater().inflate(R.layout.view_header_placeholder, list, false);        
    //mPlaceHolderView = getLayoutInflater().inflate(R.layout.view_header_placeholder, mListView, false);      
    list.setAdapter(adapter);

现在,由于您不再使用 mListView ,您应该留意 mListView 的实例,并将其替换为您的列表