接触android不久,对于listView的使用摸索出两种方法,不到之处还请大家指正。

ListView作为重要的展现控件,很多场合中需要满足动态加载Item,相应点击Item事件和灵活布局三种要求。

直接继承BaseAdapter类,重写getCount(),getItem(int position), getItemId(int position), getView(int position, View convertView, ViewGroup parent)方法,如果数据发生变化或需要动态加载新的Item时,调用notifyDataSetChanged方法即可。代码示例如下:

  public class UserListAdapter extends BaseAdapter{

    private ArrayList userList;

    private Context mContext;

    public UserListAdapter(Context context, ArrayList userList) {

mContext = context;

this.userList = userList;

}

public int getCount() {

return userList.size() ;

}

public Object getItem(int position) {

return position;

}

public long getItemId(int position) {

return position;

}

public View getView(int position, View convertView, ViewGroup parent) {

UserItemView userView;

UserInfo user = userList.get(position);

if (convertView == null

userView = new UserItemView(mContext, user);

 else 

userView = (UserItemView) convertView;

return userView;

}

    }


如上代码中UserItemView(mContext, user)的实现方法正是本文介绍的重点。

方法一:UserItemView继承LinearLayout类(或者其它布局类如RelativeLayout等)在初始化函数中集成setOnClickListener方法以实现响应点击事件;在代码中加载新的控件和位置关系等,以实现布局,代码示例如下:

public class UserItemView extends LinearLayout{

private ImageView userImageView;

private TextView userNameView;

private UserInfo user;

private Context mContext;

private LinearLayout firstLayout;

public UserItemView(Context context, final UserInfo user) {

super(context);

mContext = context;

this.user = user;

setLayout(context);

this.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

// 响应点击事件

}  

        });  

}

private void setLayout(Context context) {

firstLayout = new LinearLayout(context);

firstLayout.setOrientation( LinearLayout.VERTICAL ); 

userImageView = getUserIcon(user.getId() , user.getIconId() );

firstLayout.addView(userImageView);

userNameView = new TextView(context);

userNameView.setText(user.getName() );

firstLayout.addView(userNameView, new LinearLayout.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

addView(firstLayout, new  LinearLayout.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

}

}

上面一种方法是用代码的方法来实现布局,比较复杂,可复用性也较差,所以下面介绍另一种方法:

直接让UserItemView继承OnItemClickListener方法以实现响应点击事件,加入一个layout文件以实现布局。

最终代码是下面这个样子:

在项目中调用UserListAdapter:

if (userListAdapter == null) {

userListAdapter = new UserListAdapter(SlimTaskListActivity.this, mUserList);

userListView.setAdapter(userListAdapter);   // userListView是与ListView绑定的控件。

userListView.setOnItemClickListener(userListAdapter);   //绑定点击事件

}

taskListAdapter.notifyDataSetChanged();     //列表将根据mUserList中的内容重新更新。

下面是UserListAdapter类的具体实现:

    public class UserListAdapter extends BaseAdapter implements OnItemClickListener{

    private ArrayList userList; //ListView要显示的数据内容

    private LayoutInflater inflater; //用于加载layout文件

       public UserListAdapter(Context context, ArrayList userList) {

this.inflater = LayoutInflater.from(context);

this.userList = userList;

    }

    

public int getCount() {

return userList.size() ;

}


public Object getItem(int position) {

return position;

}


public long getItemId(int position) {

return position;

}


public View getView(int position, View convertView, ViewGroup parent) {

convertView = inflater.inflate(R.layout.user_list_item_view, null);

setTaskItemContent(convertView, mUserList.get(position));

return convertView;

}

private void setTaskItemContent(View convertView, UserInfo user) {

((TextView) convertView.findViewById(R.id.user_name)).setText( user.getName() );

}

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

}

 }





更多相关文章

  1. Android中Tab类型主界面大总结一共5种方式
  2. ERROR: Unknown command 'crunch' 解决方法
  3. [Android(安卓)L]Android(安卓)L RippleView 效果 低版本实现
  4. Ubuntu10.04下载并编译Android4.3源代码
  5. Android(安卓)Activity原理以及其子类描述
  6. 记录 Android(安卓)WebView 开发过程的坑和解决方法
  7. AndroidのContentProvider之数据库更新UI
  8. 安卓开发第一次实验
  9. Android(安卓)GridView 的使用

随机推荐

  1. Android 剪切板监听
  2. ActionBar(1) 告别ActionBarSherlock,使用
  3. Android从SD卡和Res读取图片,防止发生OOM
  4. 安卓中出现Android library projects can
  5. Android(安卓)中颜色对应的值
  6. [置顶] [Android] AsyncTask使用实例---
  7. Android启动过程分析
  8. Android Intent (1)
  9. Android实现在屏幕上移动图片的方法
  10. Android(安卓)多语言 多地区对应表