首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在android的Listview中显示两种不同的视图?

在Android的ListView中显示两种不同的视图可以通过自定义适配器来实现。以下是一种常见的实现方式:

  1. 创建一个自定义适配器类,继承自BaseAdapter或ArrayAdapter。
  2. 在适配器类中重写以下方法:
    • getViewTypeCount():返回视图类型的数量,这里是2。
    • getItemViewType(int position):返回指定位置的数据项所对应的视图类型,根据需要返回0或1。
    • getView(int position, View convertView, ViewGroup parent):根据视图类型返回不同的视图。
  3. getView()方法中,根据视图类型使用不同的布局文件或视图对象来创建视图。
    • 如果convertView为空或类型不匹配,可以使用LayoutInflater来创建新的视图。
    • 对于不同的视图类型,可以使用if-else语句或switch语句来选择不同的布局文件或视图对象。
    • 使用convertView.findViewById()来获取布局文件或视图对象中的各个控件,并设置它们的属性和数据。
  4. 在Activity中,将自定义适配器设置给ListView。

下面是一个示例代码:

代码语言:java
复制
public class MyAdapter extends BaseAdapter {
    private static final int VIEW_TYPE_1 = 0;
    private static final int VIEW_TYPE_2 = 1;
    private List<Item> itemList;
    private LayoutInflater inflater;

    public MyAdapter(Context context, List<Item> itemList) {
        this.itemList = itemList;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return itemList.size();
    }

    @Override
    public Object getItem(int position) {
        return itemList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        Item item = itemList.get(position);
        if (item.getType() == 1) {
            return VIEW_TYPE_1;
        } else {
            return VIEW_TYPE_2;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int viewType = getItemViewType(position);
        if (convertView == null || convertView.getTag() != viewType) {
            if (viewType == VIEW_TYPE_1) {
                convertView = inflater.inflate(R.layout.item_type_1, parent, false);
                convertView.setTag(VIEW_TYPE_1);
            } else {
                convertView = inflater.inflate(R.layout.item_type_2, parent, false);
                convertView.setTag(VIEW_TYPE_2);
            }
        }

        // 获取布局文件或视图对象中的控件
        TextView textView = convertView.findViewById(R.id.text_view);
        ImageView imageView = convertView.findViewById(R.id.image_view);

        // 设置控件属性和数据
        Item item = itemList.get(position);
        textView.setText(item.getText());
        imageView.setImageResource(item.getImageResId());

        return convertView;
    }
}

在上述代码中,假设有两种不同的Item类型,分别对应item_type_1.xmlitem_type_2.xml两个布局文件。根据Item的类型,在getView()方法中选择不同的布局文件,并设置对应的数据。

使用示例:

代码语言:java
复制
List<Item> itemList = new ArrayList<>();
// 添加Item数据
// ...

MyAdapter adapter = new MyAdapter(context, itemList);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);

以上代码中,item_type_1.xmlitem_type_2.xml是自定义的布局文件,可以根据实际需求进行设计。在Activity中,创建自定义适配器的实例,并将其设置给ListView,即可实现在ListView中显示两种不同的视图。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发-Listview显示不同视图布局

使用场景 在重写ListViewBaseAdapter时,我们常常在getView()方法复用convertView,以提高性能。...convertView在Item为单一同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView回收和重用会出现问题。...比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排行为第二类布局。单一类型ListView很简单,下面着重介绍一下ListView包含多种类型视图布局情形。...2.ListView包含不同Item布局 我们需要做这些工作:   1)重写 getViewTypeCount() – 该方法返回多少个不同布局   2)重写 getItemViewType...(int) – 根据position返回相应Item   3)根据view item类型,在getView创建正确convertView 3.案例 import java.util.ArrayList

2.2K30

Android ListView列表视图使用方法

前言 当你要将某个从数据库或者文件获得相当大数据,在界面向用户展示时候,由于定义一个个视图比较麻烦,Android中提供了类似于数组控件–ListView。...="wrap_content" </ListView 2、接着你需要创建一个适配器MyAdapter类,这个适配器作用时将你要展示数据转成可见格式也就时View。...会调用到这个方法,因为要把传进去对象数组每个元素转成view加入到listview } } 3、然后要在xml写下你要转成view模板 <?...4、最后在MainActivitylistview适配器设置一下。...会调用到这个方法,因为要把传进去对象数组每个元素转成view加入到listview } } } 效果: ?

1.1K20

Android ListViewheaderview动态显示和隐藏实现方法

Android ListViewheaderview动态显示和隐藏实现方法 1.动态设置headerview方法 动态设置headerview有两个思路。...方法一 将header布局写在list item布局文件,在adapter通过判断position值是否为0动态控制其显示或隐藏。 代码示例: item.xml布局文件 <?...然后在 MyListViewAdapter.JavagetView方法处理header显示问题,如果position为0,则显示header,隐藏普通item。...提供addHeaderView 为了动态显示和隐藏header,按照惯例,误以为直接通过setVisibilityView.GONE就可以实现。...mHeader.setVisibility(View.GONE); 以上两种方法各有优劣,个人倾向于第二种方法,第一种耦合性太强了,并且由于将header布局与普通item布局合在一起,另外每次显示时额外增加了一次

1.8K41

ListView实现部分刷新两种方法

大家好,又见面了,我是你们朋友全栈君。 ListView在开发中用到地方非常多,我们经常是全部刷新来更新数据,如果只需要更新某一条数据,该怎么实现呢?...我在项目中使用过以下两种方法: 1.通过点击位置,获取需要刷新那一列对应控件,然后在控件上显示数据。 2.通过点击位置,在数据源上移除对应位置数据,并且重新设置新数据,然后刷新。...{ private ListView lvMain; private TestAdapter adapter; @Override protected void onCreate...super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvMain = (ListView...mListView; public void setListView(ListView listView){ mListView = listView; }

1.1K20

Android listViewbutton点击事件

大家好,又见面了,我是你们朋友全栈君。 如果listViewitem有button控件,那么如何获取listViewbutton控件?...又如何在点击button时定位当前item?...在listviewlistitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认是listitembutton会捕获点击事件。...要想在点击item时生效,只需要设置button非高亮就可以了,如下: android:focusable="false" 或者设置listview高亮,如下: myListView.setFocusable...:android在Activity响应ListView内部按钮点击事件两种方法_今人不见古时月,今月曾经照古人博客-CSDN博客 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

2K10

Android解决ScrollView下嵌套ListView和GridView内容显示不全问题

最近为公司做一个Demo里面用到了ScrollView嵌套了GridView和ListView,然而在嵌套时候我发现GridView和ListView都是不能完全显示显示基本上都是单行数据,最后查找资料和翻阅文档看到原因是...ListView和GridView绘制过程在ScrollView无法准确测量自身高度,而且listVIew和GridView抢占了焦点,使得ListView和GrideView具有自身显示效果...,这样就测量出显示一行条目即可距离,其他条目根据自身滑动显示。...="#ffffff" </ListView </LinearLayout </ScrollView 显示效果是这样其中Listview和GridView是可以滑动就是显示不全...(0, 0); //此处方法并不好 //5其中5是我们在Xmlandroid:numColumns="5" //FontDisplayUtil.dip2px(

2.3K20

Android开发画廊视图Gallery两种使用方法分析

本文实例讲述了Android开发画廊视图Gallery两种使用方法。分享给大家供大家参考,具体如下: 第一种方法: 第一步:设计xml布局文件 代码如下:main.xml <?...public class ImageGalleryAdapter extends BaseAdapter { private Context context; // 里面所有的方法表示是可以根据指定显示图片数量...public ImageGalleryAdapter(Context context) { this.context = context; } public int getCount() { // 取得要显示内容数量...:从R.java文件获取图片资源id,如果资源图片数量比较多,用数组方法一一定义,就不太合适,这种方法最好了。...相关内容感兴趣读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《

44310

AndroidTextView实现分段显示不同颜色字符串

关于TextView TextView是Android开发中最最常见控件之一,在API记录属性有很多,但实际开发,也遇到很多有趣需求,值得去尝试,所以记录下来,既可以给大家提供参考,同时自己需要时候也方便查找...最近开发过程中有个小小知识点,就是TextView显示内容需要分段显示不同颜色,如下图所示 ?...一般有三种实现方式 直接根据不同需要分段字符串,然后分别使用多个TextView来显示 使用spannablestring 使用Html 下面分别来简单介绍下三种方法 多个TextVew 这种方式简单粗暴...SpannableString可以精确控制一个长长字符串第几个到第几个字符样式 SpannableString spannableString = new SpannableString("jakjfkajfjaj...TextView) view.findViewById(R.id.tvContent); tvContent.setText(Html.fromHtml(content)); 以上就是TextView分段显示不同样式字符串方法

3.7K30

android读取sqlite数据库数据并用listview显示

数据库数据并用listview显示 刚刚接触android,老师给了我了几个班级信息excel,让我做一个考勤系统出来,本篇仅记录了真机调试下,读取已有静态数据库并显示listview。...ListView 此时问题来了,一个班有60个人,读取到ListView针对每一个Item都要要求adapter”给我一个视图”(getView),如果一个班有上亿的人要为每一个Item都新建一个视图显然是不可能...实际上Android为你缓存了视图Android中有个叫做Recycler构件,下图是他工作原理 如果你有10亿个项目(item),其中只有可见项目存在内存,其他在Recycler。...ListView先请求一个type1视图(getView)然后请求其他可见项目。convertView在getView是空(null)。...优化,convertView为空时,创建一个新视图; * convertView不为空时,代表它是滚出, * 放入Recycler视图

2.2K20

Android UI ListView列表控件示例

这里我们就使用了一个简单 data 数组来模拟。 数组数据需要借助适配器来传递。Android 中提供了很多适配器实现类,其中最好用就是 ArrayAdapter。...我们使用了 android.R.layout.simple_list_item_1作为 ListView 子项布局 id,这是一个 Android内置布局文件,里面只有一个 TextView,用于显示一段文本...ListView 示例 2 定制界面 现在让 ListView 可以显示更加丰富内容。 准备好一组图片,分别对应上面提供每一种猫,我们要让这些猫名称旁边都有一张图。...用于显示图片,又定义了一个 TextView 用于显示名称。...注册了一个监听器,当用户点击了 ListView 任一个子项时就会回调 onItemClick() 方法,在这个方法可以通过 position 参数判断用户点击是哪一个子项。

1.5K20

androidListView item 插入 GridView 仿微信朋友圈图片显示

,这里我分了两个数据适配器,一个是自定义 listViewitem 风格xml,另一个是该风格xml文件里面的嵌套GridView数据适配。...然后我们需要两个数据辅助类,类似上述,一个是专门来保存在GridView显示每张图片信息,例如它url、name、id等等,暂称该辅助类为 UserImgs,大家可以随便增删,另一个是总专门保存...listViewitem数据,我们称它为UserInfo,这里,说明下,因为每条 item 都有一个自己GridView,也就是说,UserInfo必须要有一个UserImgs类实例,用来存储图片信息...数据适配重写类      声明,这个例子和下面的例子图片显示都采用了开源框架---imageLoder。...     GridView 数据适配类作用主要是把图片都显示到 GridView上面,再返回此 View,然后显示ListView item 上面。

2.3K50

Android ListView动态添加RaidoButton实例详解

Android ListView动态添加RaidoButton实例详解 这里讲解内容是:从数据库取得数据,将这些数据value值赋值给Radiobuttontext属性,将这些数据key值赋值给...XML代码:主要是添加一个ListView控件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"...="match_parent" <ListView android:id="@+id/ListView01" android:layout_width="fill_parent...public class TestActivity extends Activity { //初始化字符数组:arrayValue用于存放数据库取得key值,arrayText用于存放数据库取得...ListView动态添加RaidoButton实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站支持!

1K31

Android视图焦点Focus详细介绍

在非触摸屏设备接收事件和处理响应控件是具有焦点(Focused)控件。一个窗口中一个时间内只能有一个具有焦点控件。...在早期具有滚轮设备android系统以及现在智能TV电视应用中视图焦点控制就非常重要了。...比如某个视图层次下视图ROOT下有A,B,C三个子视图,而B下面又有B1,B2,B3三个子视图,而这时候B3是具有焦点视图,那么在BmFocued保存是B3,而ROOT下mFocued保存是...如果都没有焦点视图时则返回null public View findFocus() 下面的方法是ViewGroup方法,获取直接焦点子视图,也就是返回mFocued数据成员。...如果是ViewGroup则根据setDescendantFocusability规则进行:如果是阻止子视图则自己进行焦点获取,否则就按规则先子节点或者后子节点。

2.4K20

何在keras添加自己优化器(adam等)

2、找到keras在tensorflow下根目录 需要特别注意是找到keras在tensorflow下根目录而不是找到keras根目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录下python目录中找到keras目录,以GPU为例keras在tensorflow下根目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

44.9K30

Android开发Listview动态加载数据方法示例

本文实例讲述了Android开发Listview动态加载数据方法。...分享给大家供大家参考,具体如下: 最近在研究网络数据加载问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview。...ListView) findViewById(R.id.tv); // 添加到脚页显示 listView.addFooterView(loadingLayout); // 给ListView添加适配器...listView.setAdapter(adapter); // 给ListView注册滚动监听 listView.setOnScrollListener(this); } /** * 要用用于生成显示数据...、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》及《Android资源操作技巧汇总

1.8K10
领券