Android常用开源项目(十九)

来源:互联网 发布:标准差 快速算法 编辑:程序博客网 时间:2024/06/07 07:45

Android 开发之ListView中嵌套listview

  1. 自定义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 开发之ListView中嵌套listview

展开的listView效果图

Android 开发之ListView中嵌套listview

嵌套的listview效果图

原创粉丝点击