Android常用开源项目(十九)
来源:互联网 发布:标准差 快速算法 编辑:程序博客网 时间:2024/06/07 07:45
Android 开发之ListView中嵌套listview
自定义ChildLiistView,集成ListView
public class ChildLiistView extends ListView {
public ChildLiistView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
2.自定义ChildListView的ChildAdapter
public class ChildAdapter extends BaseAdapter {
private ArrayList<HashMap<String, Object>> list;
private Context context;
private LayoutInflater inflater;
public ChildAdapter(Context context) {
super();
this.context = context;
}
public void addAll(ArrayList<HashMap<String, Object>> list) {
this.list=list;
notifyDataSetChanged();
}
public void clearAll() {
this.list.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ParentListItem parentListItem = null;
if (convertView == null) {
parentListItem = new ParentListItem();
inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.childitem, null, false);
parentListItem.tv_1 = (TextView) convertView
.findViewById(R.id.tv_1);
parentListItem.tv_2 = (TextView) convertView
.findViewById(R.id.tv_2);
parentListItem.tv_3 = (TextView) convertView
.findViewById(R.id.tv_3);
parentListItem.tv_4 = (TextView) convertView
.findViewById(R.id.tv_4);
convertView.setTag(parentListItem);
} else {
parentListItem = (ParentListItem) convertView.getTag();
}
parentListItem.tv_1.setText((CharSequence) list.get(position).get(
"parent_address"));
parentListItem.tv_2.setText((CharSequence) list.get(position).get(
"parent_title"));
parentListItem.tv_3.setText((CharSequence) list.get(position).get(
"parent_distance"));
parentListItem.tv_3.getPaint()
.setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
parentListItem.tv_4.setText((CharSequence) list.get(position).get(
"parent_distance1"));
return convertView;
}
public class ParentListItem {
TextView tv_1, tv_2, tv_3, tv_4;
}
}
3.定义ChildAdapter的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/select7"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="35dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:text="¥"
android:textColor="#2fb8ad"
android:textSize="13dp" />
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="8.9"
android:textColor="#2fb8ad"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_2"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_marginLeft="50dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="原味金枪鱼紫菜包饭1份" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="27dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:text="¥"
android:textColor="#999999"
android:textSize="13dp" />
<TextView
android:id="@+id/tv_3"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="15"
android:textColor="#999999"
android:textSize="13dp" />
<TextView
android:id="@+id/tv_4"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="right"
android:text="已售1442"
android:textColor="#999999"
android:textSize="13dp" />
</LinearLayout>
</LinearLayout>
4.定义ParentAdapter的适配器
public class ParentAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<HashMap<String, Object>> list;
private Context context;
private LayoutInflater inflater;
public ParentAdapter(ArrayList<HashMap<String, Object>> list,
Context context) {
super();
this.list = list;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ChildListViewItem childListViewItem = null;
if (convertView == null) {
childListViewItem = new ChildListViewItem();
convertView = inflater.inflate(R.layout.parentitem, null, false);
childListViewItem.child_item_img = (ImageView) convertView
.findViewById(R.id.child_item_img);
childListViewItem.child_item_title = (TextView) convertView
.findViewById(R.id.child_item_title);
childListViewItem.parent_lv = (ChildLiistView) convertView
.findViewById(R.id.parent_lv);
childListViewItem.child_item_price_old = (TextView) convertView
.findViewById(R.id.child_item_price_old);
childListViewItem.child_item_price_score = (TextView) convertView
.findViewById(R.id.child_item_price_score);
convertView.setTag(childListViewItem);
} else {
childListViewItem = (ChildListViewItem) convertView.getTag();
}
childListViewItem.child_item_title.setText((CharSequence) list.get(
position).get("child_item_title"));
childListViewItem.child_item_price_old.setText((CharSequence) list.get(
position).get("child_item_price_old"));
childListViewItem.child_item_price_score.setText((CharSequence) list
.get(position).get("child_item_price_score"));
final Button bt_jz = (Button) convertView.findViewById(R.id.bt_jz);
final ChildAdapter daAdapter = new ChildAdapter(context);
int z = ((ArrayList<HashMap<String, Object>>) list.get(position).get(
"parent_lv")).size();
if (z <= 2) {
bt_jz.setVisibility(View.GONE);
daAdapter.addAll((ArrayList<HashMap<String, Object>>) list.get(
position).get("parent_lv"));
childListViewItem.parent_lv.setAdapter(daAdapter);
} else {
bt_jz.setVisibility(View.VISIBLE);
bt_jz.setText("查看其它" + (z - 2) + "个优惠 ▼");
ArrayList<HashMap<String, Object>> list1 = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < 2; i++) {
list1.add(((ArrayList<HashMap<String, Object>>) list.get(
position).get("parent_lv")).get(i));
}
daAdapter.addAll(list1);
childListViewItem.parent_lv.setAdapter(daAdapter);
// childListViewItem.parent_lv.setAdapter(new ParentAdapter(
// (ArrayList<HashMap<String, Object>>) list.get(position)
// .get("parent_lv"), context));
bt_jz.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
bt_jz.setVisibility(View.GONE);
daAdapter.addAll((ArrayList<HashMap<String, Object>>) list
.get(position).get("parent_lv"));
}
});
}
childListViewItem.parent_lv
.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Intent intent = new Intent(context, Activity_2.class);
Toast.makeText(context, "第" + (arg2+1) + "个条目",
Toast.LENGTH_LONG).show();
context.startActivity(intent);
}
});
return convertView;
}
public class ChildListViewItem {
TextView child_item_title, child_item_price_old,
child_item_price_score;
ImageView child_item_img;
ChildLiistView parent_lv;
}
}
5.定义ParentAdapter适配器的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/select7"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical" >
<View
android:layout_width="fill_parent"
android:layout_height="0.1dp"
android:background="@color/jiangexian" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" >
<ImageView
android:id="@+id/child_item_img"
android:layout_width="80dp"
android:layout_height="70dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/child_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/child_item_img"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/child_item_img"
android:ellipsize="end"
android:maxLines="1"
android:padding="5dp"
android:textColor="#666666"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_tuan"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginTop="7dp"
android:layout_toRightOf="@id/child_item_title"
android:src="@drawable/tuan" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="7dp"
android:layout_toRightOf="@id/iv_tuan"
android:src="@drawable/quan" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/child_item_img"
android:layout_toRightOf="@+id/child_item_img"
android:gravity="center_vertical"
android:orientation="horizontal" >
<RatingBar
android:id="@+id/rb_xing"
style="@style/myratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:isIndicator="true"
android:numStars="5"
android:rating="5"
android:stepSize="1" />
<TextView
android:id="@+id/child_item_price_old"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:padding="5dp"
android:singleLine="true"
android:text="5.0分"
android:textColor="#FF8400"
android:textSize="13sp" />
<TextView
android:id="@+id/child_item_price_score"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="999"
android:ellipsize="end"
android:gravity="left"
android:padding="5dp"
android:singleLine="true"
android:text="(141人)"
android:textColor="@color/textcolor_lightgray"
android:textSize="13sp" />
</LinearLayout>
</RelativeLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#e8e8e8" />
<com.zl.listview.ChildLiistView
android:id="@+id/parent_lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="#e8e8e8"
android:dividerHeight="1dp"
android:fadingEdge="none"
android:listSelector="@android:color/transparent"
android:scrollbars="none"
android:scrollingCache="false" >
</com.zl.listview.ChildLiistView>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#e8e8e8" />
<Button
android:id="@+id/bt_jz"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="@drawable/select7"
android:text="查看更多优惠"
android:textColor="#2fb8ad" />
</LinearLayout>
6.在Activity中实现嵌套布局的显示
public class QianTaoListviewActivity extends Activity {
private ListView listView;
private ArrayList<HashMap<String, Object>> parentList, childList;
private ParentAdapter parentAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qiantao);
init();
}
private void init() {
listView = (ListView) findViewById(R.id.qiantao_lv);
getList();
}
private void getList() {
parentList = new ArrayList<HashMap<String, Object>>();
for (int i = 1; i < 10; i++) {
childList = new ArrayList<HashMap<String, Object>>();
for (int j = i < 7 ? i : 7; j < 9; j++) {
HashMap<String, Object> ParentMap = new HashMap<String, Object>();
ParentMap.put("parent_title", "三木铁板烧" + i);
ParentMap.put("parent_address", "8." + i);
ParentMap.put("parent_distance", "1" + i);
ParentMap.put("parent_distance1", "已售123" + i);
childList.add(ParentMap);
}
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("child_item_title", "九州八拖二火锅" + i);
map.put("child_item_price_old", "4." + i + "分");
map.put("child_item_price_score", "(100人)");
map.put("parent_lv", childList);
parentList.add(map);
}
parentAdapter = new ParentAdapter(parentList,
QianTaoListviewActivity.this);
listView.setAdapter(parentAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent intent = new Intent(QianTaoListviewActivity.this,
Activity_1.class);
Toast.makeText(QianTaoListviewActivity.this,
"第" + arg2 + "个条目", Toast.LENGTH_LONG).show();
startActivity(intent);
}
});
}
}
7.定义Activity的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/mianbgcolor"
android:orientation="vertical"
android:padding="5dp" >
<ListView
android:id="@+id/qiantao_lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="5dp"
android:cacheColorHint="#00000000"
android:divider="#e8e8e8"
android:dividerHeight="5dp"
android:fadingEdge="none"
android:listSelector="@android:color/transparent"
android:scrollbarThumbVertical="@drawable/scrollbar"
android:scrollingCache="false" >
</ListView>
</LinearLayout>
8.实现的效果图
- Android常用开源项目(十九)
- Android常用开源项目(二十九)
- Android常用开源项目
- Android常用开源项目
- Android常用开源项目
- android 常用开源项目
- Android常用开源项目
- android常用开源项目
- Android常用开源项目
- Android常用开源项目
- android 项目学习随笔十九(MD5)
- 常用android、ios开源项目
- android中常用的开源项目
- Android项目常用开源框架整理
- android常用的开源项目推荐
- android常用的开源项目。
- android开源项目和常用框架
- Android开源项目和常用控件
- 游戏实时语音解决方案是怎么炼成的
- css的三种方式
- MFC/C++读取配置文件ini的数据
- android 6.0系统应用内更新导致的解析包错误问题
- slf4j的包使用说明
- Android常用开源项目(十九)
- HashMap源码分析
- 设计模式之简单工厂模式
- C#7.0中有哪些新特性?
- 在windows下如何快速搭建web.py开发框架
- 汇编语言MASM考试知识点小结!
- static关键字作用分析
- Python安装
- Js时间格式化