ListView加载不同的条目
来源:互联网 发布:淘宝上的汝窑茶具 编辑:程序博客网 时间:2024/05/16 04:54
首先,ListView我们平时用的都比较多,以往的开发中用的也不叫多;
以前一直都是加载一样的布局一样的条目。
现在加载不同布局的条目:
这里用的数据是自定义的(有的需要在网上获取)
1.创建ListView布局(后面的item布局需要根据自定义数据的需求来添加)
<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView"></ListView>2.创建JavaBean类,写入自定义属性 (注意:里面需要多写一个类型的属性 及 Type)
public class DataBean { //类型数据 public int type; //文本数据 public String text; //图片数据 public int images; @Override public String toString() { return "DataBan{" + "type=" + type + ", text='" + text + '\'' + ", images=" + images + '}'; }}//这里toString供后面打印使用 可以不用写
3.在MainActivity中写入代码
public class MainActivity extends AppCompatActivity { //设置三种类型 来设置不同的item private static final int FristType=1; private static final int TwoType=2; private static final int ThreeType=3;
//上面这些在Android studio中可以利用const自动生成//自定义数据 String[] texts = {"玉皇", "王母", "长蛾", "八戒", "如来", "易宸锋", "守星者", "部长", "大师", "收藏家"}; private int[] images = {R.drawable.jx_left_listitem_1, R.drawable.jx_left_listitem_5, R.drawable.jx_left_listitem_2, R.drawable.jx_left_listitem_3, R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5, R.drawable.jx_left_listitem_6, R.drawable.jx_left_listitem_6, R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5};//创建集合 private List<DataBean> list; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//控件 listView=(ListView)findViewById(R.id.listView); //初始化数据 initData(); listView.setAdapter(new MyAdapter()); } //初始化数据 下面打印出来有助于理解 private void initData() { list=new ArrayList<>(); for (int i = 0; i < 10; i++) { DataBean data=new DataBean(); //第一 if (i%2==0 ){ data.type=FristType; data.text=texts[i]; Log.d("data","位置"+i+"里的数据:"+data.toString()); //第二 }else if (i%3==0){ data.type=TwoType; data.text=texts[i]; data.images=images[i]; Log.d("data","位置"+i+"里的数据:"+data.toString()); //第三 }else { data.type=ThreeType; data.text=texts[i]; data.images=images[i]; Log.d("data","位置"+i+"里的数据:"+data.toString()); } list.add(data); } }
4.下面是适配器(我写的是内部类,上面设置适配器的时候没有传参)下面用到的布局(有三种类型 就需要三个不同的item)
第一个:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv1"/></LinearLayout>第二个:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv2"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv2"/></LinearLayout>第三个:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv3"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv3"/></LinearLayout>注意:第二个和第三个里的布局方向不同//listView显示不同条目的Adapter,比平常用的多了两个方法 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } //表示有几种类型的item,这里有三种 @Override public int getViewTypeCount() { return 4;//这里注意必须比上面定义的数要大 } //返回ListView所加载的item的类型 @Override public int getItemViewType(int position) { return list.get(position).type; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder1 holder1=null; ViewHolder2 holder2=null; ViewHolder3 holder3=null; int type = getItemViewType(position); if (convertView==null){ //存值 switch (type){ case FristType: holder1=new ViewHolder1(); convertView=View.inflate(MainActivity.this,R.layout.item,null); holder1.tv1=(TextView) convertView.findViewById(R.id.tv1); convertView.setTag(holder1); break; case TwoType: holder2=new ViewHolder2(); convertView=View.inflate(MainActivity.this,R.layout.item2,null); holder2.tv2=(TextView) convertView.findViewById(R.id.tv2); holder2.iv2=(ImageView)convertView.findViewById(R.id.iv2); convertView.setTag(holder2); break; case ThreeType: holder3=new ViewHolder3(); convertView=View.inflate(MainActivity.this,R.layout.item3,null); holder3.tv3=(TextView) convertView.findViewById(R.id.tv3); holder3.iv3=(ImageView)convertView.findViewById(R.id.iv3); convertView.setTag(holder3); break; } }else { //取值 switch (type){ case FristType: holder1=(ViewHolder1) convertView.getTag(); break; case TwoType: holder2=(ViewHolder2) convertView.getTag(); break; case ThreeType: holder3=(ViewHolder3) convertView.getTag(); break; } } //设置值 switch (type){ case FristType: holder1.tv1.setText(list.get(position).text); break; case TwoType: holder2.tv2.setText(list.get(position).text); holder2.iv2.setImageResource(list.get(position).images); break; case ThreeType: holder3.tv3.setText(list.get(position).text); holder3.iv3.setImageResource(list.get(position).images); break; } return convertView; } class ViewHolder1{ TextView tv1; } class ViewHolder2{ TextView tv2; ImageView iv2; } class ViewHolder3{ TextView tv3; ImageView iv3; } }}注:图片文件直接上传在drawable里
阅读全文
1 0
- ListView加载不同的条目
- 为ListView控件加载不同的条目
- android listview 加载多种不同视图的条目
- 关于在listView中加载不同的条目
- ListView的多条目加载
- ListView的多条目加载
- Listview的多条目加载
- ListView的多条目加载
- ListView的多条目加载
- ListView的多条目加载
- ListView的多条目加载
- listview显示不同条目的Adapter
- listview的多条目加载的适配器
- 复杂的ListView,多条目加载
- 复杂的ListView,多条目加载
- listview多条目加载的类
- listview的多条目加载和解析
- ListView加优化的多条目加载
- MySQL 事务
- ZOJ
- Android—多媒体(音频播放)
- 7/14 CCF YOCSEF学术报告会:区块链技术
- Opencv
- ListView加载不同的条目
- 32.最长的合法括号匹配
- 复制多级文件夹
- 从 1-15中,随机出来5个数,不能重复的
- 利用vs2015编写C语言遇见的错误集
- 使用cloc进行代码行统计
- linux第一天
- spring常用的一些注解以及注解注入总结
- 搜索专题:Balloons