android 自定义列表的实现

华宰 发布于 2011/09/08 12:15
阅读 13K+
收藏 14

前面实现的列表功能都是直接调用android的api,功能比较简单。这里需要实现一个自定义的视频内容列表。效果如下:

需要实现一个自定义的列表适配器类:

private class ContentAdapter extends ArrayAdapter<Content> {

    private List<Content> items;

    public ContentAdapter(Context context, int textViewResourceId, 
            List<Content> items) { 
        super(context, textViewResourceId, items); 
        this.items = items; 
    }

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
        View view = convertView;

        if (view == null) { 
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
            view = inflater.inflate(R.layout.content, null); 
        }

        Content content = items.get(position); 
        if (content != null) { 
            TextView title = (TextView) view 
                    .findViewById(R.id.ContentTitle); 
            TextView comment = (TextView) view 
                    .findViewById(R.id.ContentComment); 
            ImageView imageView = (ImageView) view.findViewById(R.id.image);

            title.setText(content.getTitle()); 
            comment.setText(content.getComment()); 
            imageView.setImageDrawable(CustomerPlayer.this.getResources() 
                    .getDrawable(Integer.parseInt(content.getImageUrl()))); 
        }

        return view; 
    } 
}
 

和该适配器中对应的列表元素布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:orientation="vertical" android:textAppearance="?android:attr/textAppearanceLarge" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:paddingLeft="6dip" android:paddingBottom="6dip"> 
    <LinearLayout android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:orientation="horizontal" 
        android:padding="5dip"> 
        <ImageView android:id="@+id/image" android:layout_width="wrap_content" 
            android:layout_height="wrap_content" android:paddingRight="10dip" /> 
        <TextView android:id="@+id/ContentTitle" 
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:textStyle="bold" android:textSize="20px"></TextView> 
    </LinearLayout> 
    <TextView android:id="@+id/ContentComment" 
        android:layout_width="fill_parent" android:layout_height="wrap_content"></TextView> 
</LinearLayout>
 

这样就可以这样调用生成列表了:

tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("栏目内容") 
.setContent(new TabContentFactory() {

    List<Content> items;

    { 
        items = new ArrayList<Content>(); 
        Content content = new Content(); 
        content.setTitle("阿童木"); 
        content 
                .setComment("因意外痛失爱子的天才科学家天马博士悲痛欲绝,萌生了复制爱子的想法并成功创造了机器人阿童木,他和人类一样拥有喜怒哀乐,而 且还有博士儿子残余的情感与记忆。但阿童木却无法令抑郁的博士重展欢颜,博士狠心决定将他遗弃…"); 
        content.setImageUrl("" + R.drawable.c1); 
        items.add(content);

        content = new Content(); 
        content.setTitle("三枪拍案惊奇"); 
        content 
                .setComment("故事发生于古代某大漠之中,一家面馆老板名为王五麻子,为人阴险吝啬,如此人品,老婆自然不待见。恰好伙计李四长得很帅又有幽默感,两人一拍即合,有了私情。王五发现两人私情后…"); 
        content.setImageUrl("" + R.drawable.c2); 
        items.add(content);

        content = new Content(); 
        content.setTitle("花木兰"); 
        content 
                .setComment("在古老的中国,有一位个性爽朗,性情善良的好女孩,名字叫作「花木兰」,身为花家的大女儿,花木兰在父母开明的教悔下,一直很期待自己能花家带来荣耀。不过就在北方匈奴来犯…"); 
        content.setImageUrl("" + R.drawable.c3); 
        items.add(content);

        content = new Content(); 
        content.setTitle("达芬奇密码"); 
        content 
                .setComment("本片讲述了哈佛大学的符号学专家罗伯特·兰登在法国巴黎出差期间的一个午夜接到一个紧急电话,得知卢浮宫博物馆年迈的馆长被人 杀害在卢浮宫的博物馆里,人们在他的尸体旁边发现了一个难以捉摸的密码…"); 
        content.setImageUrl("" + R.drawable.c4); 
        items.add(content); 
    }

    @Override 
    public View createTabContent(String tag) { 
        ListView listView = new ListView(CustomerPlayer.this); 
        listView.setAdapter(new ContentAdapter( 
                CustomerPlayer.this, 0, items));

        return listView; 
    } 
}));

源代码见:

http://easymorse.googlecode.com/svn/tags/android.customer.player-0.4/

加载中
返回顶部
顶部