在listview中有许多条目,而许多条目可能类型不一样,展示的效果可能有Image+textView,也可能只是TextView。
所以,我们需要在listview的适配器中,进行判断加载。
下面是效果图
下面是需要加载的布局文件
1:主布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" ></ListView> </RelativeLayout>
2.需要的三个布局文件类型
①布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:orientation="horizontal"> <TextView android:id="@+id/tv_1" android:text="1" android:paddingRight="5dp" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <CheckBox android:id="@+id/cb" android:checked="false" android:focusable="false" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
②布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_2" android:text="2" android:paddingRight="5dp" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout>
③布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:orientation="horizontal" > <TextView android:layout_gravity="center_vertical" android:id="@+id/tv_3" android:text="3" android:layout_marginRight="5dp" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <ImageView android:id="@+id/iv_3" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
代码文件
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ListView listview; private ArrayList<String> mList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 listview = (ListView) findViewById(R.id.listview); //初始化数据 mList = new ArrayList<String>(); for(int i = 0; i< 100; i++){ mList.add(i+""); } //设置适配器 listview.setAdapter(new MyAdapter()); } //适配器 class MyAdapter extends BaseAdapter { final int TYPE_1 = 0; final int TYPE_2 = 1; final int TYPE_3 = 2; @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } //获得题目类型总数 @Override public int getViewTypeCount() { return 3; } //获得条目类型对应条目 @Override public int getItemViewType(int position) { int p=position%3; if(p == 0){ return TYPE_1; }else if(p == 1 ){ return TYPE_2; }else if(p == 2){ return TYPE_3; }else{ return TYPE_1; } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); int itemViewType = getItemViewType(position); if(convertView == null){ switch (itemViewType){ case 0: convertView = View.inflate(MainActivity.this,R.layout.items,null); holder.checkBox= (CheckBox) convertView.findViewById(R.id.cb); holder.textView= (TextView) convertView.findViewById(R.id.tv_1); break; case 1: convertView = View.inflate(MainActivity.this,R.layout.item2,null); holder.textView= (TextView) convertView.findViewById(R.id.tv_2); break; case 2: convertView = View.inflate(MainActivity.this,R.layout.item3,null); holder.textView= (TextView) convertView.findViewById(R.id.tv_3); holder.imageView= (ImageView) convertView.findViewById(R.id.iv_3); break; } convertView.setTag(holder); }else{ holder= (ViewHolder) convertView.getTag(); } switch (itemViewType){ case 0: holder.checkBox.setChecked(true); holder.textView.setText("杨栓"+mList.get(position)); break; case 1: holder.textView.setText("杨栓"+mList.get(position)); break; case 2: holder.imageView.setBackgroundResource(R.mipmap.ic_launcher); holder.textView.setText("杨栓"+mList.get(position)); break; } return convertView; } } class ViewHolder{ CheckBox checkBox; TextView textView; ImageView imageView; } }
多加练习,必有收益。同勉。