ListActivity ListView完成加载

时间:2013-02-19 09:29:00

标签: android android-listview listactivity

我想根据ListView行的数据设置背景颜色。我实现了ListActivity,但我不知道如何通知加载完成,以便我可以访问ListView的行。

public class RouteList extends ListActivity {

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

    CommuteDb db = new CommuteDb(this);
    Cursor cursor = db.getRouteList();
    ListAdapter adapter = new SimpleCursorAdapter(this, // Context.
        R.layout.route_row, //row template
        cursor, // Pass in the cursor to bind to.
        new String[] { BaseColumns._ID, "Name" }, //Columns from table
        new int[] { R.id.id, R.id.name }, //View to display data
        0); //FLAG_REGISTER_CONTENT_OBSERVER

    setListAdapter(adapter);

    ListView listView = (ListView) findViewById(android.R.id.list);
    Log.i("RouteList","listView.getChildCount()=" + listView.getChildCount()); //returns always 0
//Loop will not execute because no row yet
    for (int i=0; i < listView.getChildCount(); i++) {
        View rowView = listView.getChildAt(i);
        Log.i("RouteList",rowView.getClass().getName());
        rowView.setBackgroundColor(0x88ff0000);
    }

如果我稍后执行此循环(例如根据用户的请求),我可以获取每一行并分配我想要的颜色。但是,我需要在ListView中加载数据后自动执行此操作。

1 个答案:

答案 0 :(得分:0)

Thanx为暗示家伙。
它以这种方式修改代码后工作: 我添加了一个从SimpleCursorAdapter派生的自定义适配器(RouteAdapter):

private class RouteAdapter extends SimpleCursorAdapter {

    public RouteAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Let the default getView do the job (inflate the row layout and set views to their values from database  
        View view = super.getView(position, convertView, parent);
        //Get the resulting view (route_row) and do custom loading
        TextView isOffer = (TextView) view.findViewById(R.id.isOffer);
        if (isOffer.getText().equals("0"))
                view.setBackgroundColor(0x8800ff00); //seek=green
            else
                view.setBackgroundColor(0x88ff0000); //offer=red

        return view;
    }
}

然后在我的原始代码中,我刚刚用RouteAdapter替换了SimpleCursorAdapter:

ListAdapter adapter = new RouteAdapter(this, // Context.