我希望通过ListActivity显示的列表中的所有项目都使用不同的颜色(请不要对不良的图形设计发表评论;我正在尝试创建演示)。

显示ListActivity很简单。但是,从这里阅读其他问题可以看出,您无法遍历ListView。因此,如何控制单个列表条目的TextView?

这是我的示例程序;注释掉的区域显示无效的代码。

package com.explorenm.colorlist;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ColorList extends ListActivity {
    private static final String colors[] = {
        "red", "green", "blue", "cyan", "magenta",
        "yellow", "black", "white"
    };
    private static final int colorvalues[] = {
        // red,   green,    blue,     cyan,
        0xFF0000, 0x00FF00, 0x0000FF, 0x00FFFF,
        // magenta, yellow,   black,   white
        0xFF00FF, 0xFFFF00, 0x000000, 0xFFFFFF
    };
@Override
public void onCreate(Bundle savedInstanceState) {
    TextView tv = null;
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(this, R.layout.listitem, colors));
    ListView lv = getListView();
//    for (int i=0; i<colors.length; i++) {
//        tv = (TextView) lv.getItemAtPosition(i); // lv.getChildAt(i) also fails
//        tv.setBackgroundColor(colorvalues[i]);
//    }
    }
}

最佳答案

您可以实现自己的ListAdapter(或更具体地说,扩展ArrayAdapter<String>)并覆盖getView( int position, View convertView, ViewGroup parent)方法。这使您可以自己构造各个列表项的视图,因此可以对它们进行完全所需的操作。

public class MyAdapter extends ArrayAdapter<String>
    public View getView( final int position, View convertView, final ViewGroup parent )
    {
        View v = convertView;
        if( v == null )
        {
            LayoutInflater li = (LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            v = li.inflate( R.layout.listitem, null );
        }
        String getItem = getItem( position );
        // Style the item and set the text here
    }
}


值得指出的是,每次调用此方法时,都应始终尝试重用convertView参数,而不要夸大新视图。这样做的原因是视图膨胀很费力,而不必要地这样做会大大影响ListView的平滑滚动。

关于android - 在ListActivity中控制单个 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6517925/

10-09 01:42