从今天起,用此博客来记录自己学Android的一点一滴。
第一篇ListView分组,就是每一组有个标题,并且标题的是不可按。
先看效果图
网上的实现方法很多,归根到底是重写Adatper里getView(),判断该项是组名,还是子项,然后返回不同view就可以了。自认为重写BaseAdapte的getItemViewType和getViewTypeCount即可。附上代码
MyAdapter
public class MyAdapter extends BaseAdapter {
public static final int TYPE_COUNT = 2;
public static final int ITEM = 0;
public static final int GROUP = 1;
private Context mContext;
private List<Category> mList;
public MyAdapter() {
}
public MyAdapter(Context context, List list) {
this.mList = list;
this.mContext = context;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList == null) {
return ITEM;
}
if (mList.get(position).isGroup()) {
return GROUP;
} else {
return ITEM;
}
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean isEnabled(int position) {
// 如果是该项是组名,就设置false,不能点
return mList.get(position).isGroup()? false : true;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(mContext);
switch (getItemViewType(i)) {
case ITEM:
if (view == null) {
view = inflater.inflate(R.layout.list_item, viewGroup, false);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.item_txt);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textView.setText(mList.get(i).getName());
viewHolder.textView.setTextColor(Color.BLACK);
break;
case GROUP:
if (view == null){
view = inflater.inflate(R.layout.group_item, viewGroup,false);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView)view.findViewById(R.id.group_txt);
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textView.setText(mList.get(i).getName());
viewHolder.textView.setBackgroundColor(Color.LTGRAY);
viewHolder.textView.setTextColor(Color.BLUE);
break;
}
return view;
}
class ViewHolder {
TextView textView;
}
}
MainActivity
public class MainActivity extends ActionBarActivity {
private ListView listView;
private List<Category> mList;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
getData();
listView = (ListView)findViewById(R.id.listview);
listView.setAdapter(new MyAdapter(mContext, mList));
listView.setOnItemClickListener(new MyItemClickListener());
}
class MyItemClickListener implements ListView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(mContext, mList.get(i).getName(), Toast.LENGTH_SHORT).show();
}
}
private void getData(){
mList = new ArrayList<Category>();
Category category = new Category("A", true);
mList.add(category);
for(int i = 0; i < 3; i++){
category = new Category("" + i, false);
mList.add(category);
}
category = new Category("B", true);
mList.add(category);
for(int i = 0; i < 3; i++){
category = new Category("" + i, false);
mList.add(category);
}
category = new Category("C", true);
mList.add(category);
for(int i = 0; i < 3; i++){
category = new Category("" + i, false);
mList.add(category);
}
}
}
数据类Category
public class Category {
private boolean isGroup;
private String name;
public Category(String name, boolean isGroup){
this.isGroup = isGroup;
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setGroup(boolean isGroup) {
this.isGroup = isGroup;
}
public boolean isGroup() {
return isGroup;
}
}