您的位置:首页 > 移动开发 > Android开发

Android学习笔记之ListView

2015-08-08 09:42 405 查看

Android学习笔记之ListView

一.ListView使用

1.先在xml里面创建ListView控件

<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>


2.在主Activity中绑定并设置适配器,通过add方法添加列表项。

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);//android.R.layout.simple_list_item_1系统资源
adapter = new ArrayAdapter<ListCellData>(this, R.layout.list_cell);//自定义

lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(adapter);

adapter.add(new ListCellData("小明", "男", 15));

lv.setOnItemClickListener(this);
adapter.add("hello");
adapter.add("world");
}


3.通过onItemClick方法可以设置列表项被点击的事件。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
ListCellData data = adapter.getItem(position);

Toast.makeText(this, String.format("名字:%s, 性别:%s, 年龄: %d", data.getUserName(), data.getSex(), data.getAge()), Toast.LENGTH_SHORT).show();
}


二.通过BaseAdapter创建有图标的ListView

public class CustomListViewAdapter extends BaseAdapter
{

private Context context = null;

public CustomListViewAdapter(Context context)
{
this.context = context;
}

public Context getContext()
{
return context;
}

private CustomListCellData[] data = new CustomListCellData[]{
new CustomListCellData("img1", "dec img1", R.drawable.img1),
new CustomListCellData("img2", "dec img2", R.drawable.img2),
new CustomListCellData("img3", "dec img3", R.drawable.img3)
};
//  private String[] data = new String[]{"eoe1","eoe2","eoe3","eoe4","eoe5","eoe6","eoe7","eoe8"};
@Override
public View getView(int position, View convertView, ViewGroup parent) //在呈现列表项的时候都会被执行
{

//      TextView tv = null;
//
//      if (convertView != null)
//      {
//          tv = (TextView) convertView;
//      }
//      else
//      {
//          tv = new TextView(CustomListView.this);
//      }
//
//      tv.setTextSize(30);
//      tv.setText(getItem(position));
//      return tv;
LinearLayout ll = null;
if(convertView != null)
{
ll = (LinearLayout) convertView;
}
else {
ll = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_listcell, null);
}

CustomListCellData data = getItem(position);

ImageView icon = (ImageView)ll.findViewById(R.id.icon);
TextView name = (TextView) ll.findViewById(R.id.name);
TextView dec = (TextView) ll.findViewById(R.id.dec);

icon.setImageResource(data.iconId);
name.setText(data.name);
dec.setText(R.id.dec);

return ll;
}

@Override
public long getItemId(int position)
{
return position;
}

//  @Override
//  public String getItem(int position)
//  {
//      return data[position];
//  }

@Override
public CustomListCellData getItem(int position)
{
return data[position];
}

@Override
public int getCount()
{
return data.length;
}
}


其中getView方法在呈现列表项的时候都会被执行。

关于LayoutInflater用法,详见博客LayoutInflater详解。

然后创建一个ListViewActivity调用这个适配器

public class CustomListViewActivity extends ListActivity
{

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview_aty);
setListAdapter(new CustomListViewAdapter(this));
}
}


或者通过普通的activity来绑定ListView控件来实现适配器

public class CustomListView extends Activity
{
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview);

lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new CustomListViewAdapter(this));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: