在android的开发过程中,我们不可避免的要使用ListView来展示我们的Activity上面的内容。你可以使用很多种方式来实现这一功能,但是如何优雅快速的来实现呢?这就是我要写的了,既为了大家共同进步,也为了以后自己复习方便。话不多说,上代码吧。
首先要在main_activity.xml 文件中写好我们的布局文件其实也就是一个ListView,然后是对于其内每一个Item,我们要展示的布局样式,如item.xml:

"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >    <ImageView  android:id="@+id/imageview" android:layout_width="100dp" android:layout_height="60dp" android:background="#FFADAD" android:src="@drawable/ic_launcher" />    <TextView  android:id="@+id/title" android:layout_width="240dp" android:layout_height="30dp" android:layout_toRightOf="@+id/imageview" android:background="#AAAAAA" android:text="Title" android:gravity="center" />    <TextView  android:id="@+id/content" android:text="Content" android:layout_width="240dp" android:layout_height="40dp" android:layout_below="@+id/title" android:layout_toRightOf="@+id/imageview" android:background="#F0000F" /></RelativeLayout>

然后对应此xml文件,我们需要声明一个bean的方式的java文件,用来封装对应的资源:

package com.example.testproject;public class ItemBean {    private int ItemImageView;    private String ItemTitle;    private String ItemContent;    public int getItemImageView() {        return ItemImageView;    }    public void setItemImageView(int itemImageView) {        ItemImageView = itemImageView;    }    public String getItemTitle() {        return ItemTitle;    }    public void setItemTitle(String itemTitle) {        ItemTitle = itemTitle;    }    public String getItemContent() {        return ItemContent;    }    public void setItemContent(String itemContent) {        ItemContent = itemContent;    }    public ItemBean(int itemImageView, String itemTitle, String itemContent) {        ItemImageView = itemImageView;        ItemTitle = itemTitle;        ItemContent = itemContent;    }}//其中需要注意的是构造函数中含有全部的参数

下面就是BaseAdapter的实现类了,为了代码的复用,我把BaseAdapter封装了起来,方便维护和修改,内部包含三个方式,我最推崇的是没有被注释的那个,代码如下:

package com.example.testproject;import java.util.List;import android.annotation.SuppressLint;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;@SuppressLint("InflateParams") public class MyAdapter extends BaseAdapter {    private List<ItemBean>mList;    private LayoutInflater mInflater;    public MyAdapter(Context context,List<ItemBean> list){        mList=list;        mInflater=LayoutInflater.from(context);    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return mList.size();    }    @Override    public Object getItem(int arg0) {        // TODO Auto-generated method stub        return mList.get(arg0);    }    @Override    public long getItemId(int arg0) {        // TODO Auto-generated method stub        return arg0;    }    @Override    public View getView(int arg0, View convertView, ViewGroup arg2) {        //Method1:没有用到后面的参数,没有缓存机制每次都是冲更新生成,资源利用度不够高// View view =mInflater.inflate(R.layout.item, null);// ImageView imageView=(ImageView)view.findViewById(R.id.imageview);// TextView title=(TextView)view.findViewById(R.id.title);// TextView content=(TextView)view.findViewById(R.id.content);// ItemBean bean=mList.get(arg0);// imageView.setImageResource(bean.getItemImageView());// title.setText(bean.getItemTitle());// content.setText(bean.getItemContent());// return view;        //Method1 _end;        //普通式:利用了ListView的缓存机制,避免了每次都创建ListView// if(convertView==null){// convertView=mInflater.inflate(R.layout.item, null);// }// ImageView imageView=(ImageView)convertView.findViewById(R.id.imageview);// TextView title=(TextView)convertView.findViewById(R.id.title);// TextView content=(TextView)convertView.findViewById(R.id.content);// ItemBean bean=mList.get(arg0);// imageView.setImageResource(bean.getItemImageView());// title.setText(bean.getItemTitle());// content.setText(bean.getItemContent());// // return convertView;        //普通式结束        //文艺式:避免用findViewById()方法        ViewHolder viewHolder;        if(convertView==null){            viewHolder=new ViewHolder();            convertView=mInflater.inflate(R.layout.item, null);            viewHolder.imageView=(ImageView)convertView.findViewById(R.id.imageview);            viewHolder.title=(TextView)convertView.findViewById(R.id.title);            viewHolder.content=(TextView)convertView.findViewById(R.id.content);            convertView.setTag(viewHolder);        }else{            viewHolder=(ViewHolder)convertView.getTag();        }        ItemBean bean=mList.get(arg0);        viewHolder.imageView.setImageResource(bean.getItemImageView());        viewHolder.title.setText(bean.getItemTitle());        viewHolder.content.setText(bean.getItemContent());        return convertView;    }    class ViewHolder{        public ImageView imageView;        public TextView title;        public TextView content;    }}//最后的内部类仅仅是第三个方法才会用的到的。

最后就是在MainActivity中添加实现了。代码如下:

package com.example.testproject;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.ListView;public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        List<ItemBean>itemBeanList=new ArrayList<ItemBean>();        for(int i=0;i<=20;i++){            itemBeanList.add(new ItemBean(                    R.drawable.ic_launcher,                    "Title"+i,"Content"+i*i                    ));        }        ListView listView=(ListView)findViewById(R.id.listview);        listView.setAdapter(new MyAdapter(this,itemBeanList));    }}

好了,代码就是这样了,然后看一下程序的效果图吧(界面没有修改,比较难看,望见谅)。

更多相关文章

  1. Android(安卓)开发自己的网络收音机4——读取XML文件的电台数据
  2. Android(安卓)反编译技术流程
  3. 实现Android客户端与Eclipse服务器端基于Okthhp简单通信
  4. [置顶] Android中ail的作用和使用说明
  5. 戏说Android(安卓)view 工作流程《上》
  6. Android中Webview使用自定义的javascript进行回调
  7. flutter项目的打包和发布 主要是Android
  8. 个人总结--Android(安卓)应用开发中国大学生挑战赛
  9. 2.Eclipse版本android 65535解决方案(原理等同android studio现

随机推荐

  1. 完美解决 No IDEA annotations attached
  2. Android窗口机制(三)Window和WindowManager
  3. Android 属性大全
  4. Android中的自绘View的那些事儿(四)之 Comp
  5. Android(安卓)| gravity和layout_gravity
  6. 安卓textview edittext 中inputType的类
  7. Android游戏引擎-Rokon
  8. 如何在Android中获知屏幕打开或者关闭
  9. android:gravity ,和 android:layout_grav
  10. Windows下给Android(安卓)app进行系统签