布局文件一:放入一个listview控件
<LinearLayout 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"
tools:context=".ListviewDemo" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
</LinearLayout>
布局文件二:要展示在listview条目里面的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:padding="10dp"
android:singleLine="true"
android:maxLength="10"
android:text="标题:明星死亡" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="10dp"
android:text="日期:2016" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView1"
android:padding="10dp"
android:text="类型:娱乐" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/textView2"
android:padding="10dp"
android:text="作者:郭佳伟" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textView4"
android:layout_marginTop="15dp">
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#FC5363" />
</LinearLayout>
</RelativeLayout>
创建适配器(新建一个类继承BaseAdapter,重写里面的方法)
public class MyAdapter extends BaseAdapter {
// 维护一个上下文,下面获取布局listview的item布局文件的时候会用到
private Context context;
private ArrayList<NewsBean> listnewsBeans = null;
//构造函数
public MyAdapter(Context context, ArrayList<NewsBean> listnewsBeans) {
super();
this.context = context;
this.listnewsBeans = listnewsBeans;
}
// 返回多少条数据
public int getCount() {
return listnewsBeans.size();
}
// 根据传入的位置,获取该下标对应的对象,通常返回数据源
public Object getItem(int position) {
return listnewsBeans.get(position);
}
// 根据传入的位置,获取该item的id,通常返回:position
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
/**
*listview的一级优化
* 判断回收池是否为空,如果为空将获取到的listview的item布局赋值给回收池
*listview的二级优化
* 创建一个类,里面存放的是listview的item的控件,如果回收池不为空,直接从容器中获取控件,不再是从布局文件中查找
*/
if (convertView == null) {
//如果回收池为空,将item布局文件转化成view对象,赋值给回收池
convertView = LayoutInflater.from(context).inflate(R.layout.listview_item, null);
//创建一个容器的对象
vh = new ViewHolder();
//通过容器对象调用里面的属性,将获取的控件赋值给属性
vh.TitleTextView = (TextView) convertView.findViewById(R.id.textView1);
vh.dateTextView = (TextView) convertView.findViewById(R.id.textView2);
vh.typeTextView = (TextView) convertView.findViewById(R.id.textView3);
vh.anthorTextView = (TextView) convertView.findViewById(R.id.textView4);
//调用setTag(vh)方法将容器封装起来,此时容器中已经存在listview的item中的所有控件,以便再次获取
convertView.setTag(vh);
}else {
//如果回收池为空,直接从容器中获取控件,而不再是从布局文件中查找控件
vh = (ViewHolder) convertView.getTag();
}
vh.TitleTextView.setText("标题:" + listnewsBeans.get(position).getTitle());
vh.dateTextView.setText("日期:" + listnewsBeans.get(position).getDate());
vh.typeTextView.setText("类型:" + listnewsBeans.get(position).getType());
vh.anthorTextView.setText("作者:" + listnewsBeans.get(position).getAuthor());
return convertView;
}
//创建一个容器,将listview的item里面的控件放在里面
class ViewHolder
TextView TitleTextView;
TextView dateTextView;
TextView typeTextView;
TextView anthorTextView;
}
}
在activity中创建数据源,给listview绑定适配器
public class ListviewDemo extends Activity {
private ListView listView;
private MyAdapter myAdapter;
private ArrayList<NewsBean> listnewsBeans;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
listView = (ListView) findViewById(R.id.listView1);
}
// 数据源
listnewsBeans = new ArrayList<NewsBean>();
// 将数据源通过构造函数传到适配器
myAdapter = new MyAdapter(ListviewDemo.this, listnewsBeans);
// 给listview绑定适配器
listView.setAdapter(myAdapter);
}
335

被折叠的 条评论
为什么被折叠?



