手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >android二级listview列表实现代码
android二级listview列表实现代码
摘要:今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。这种横向的listview二级列表在手机软件上还不太常见,但是使用...

今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。

android二级listview列表实现代码1

这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的。可能是因为平板屏幕比较大,而且也能展现更多的内容。

下面来看一下我的实现步骤。

首先自定义一个listview,代码如下:

复制代码 代码如下:

public class MyListView extends ListView implements Runnable {

private float mLastDownY = 0f;

private int mDistance = 0;

private int mStep = 10;

private boolean mPositive = false;

public MyListView (Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyListView (Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public MyListView (Context context) {

super(context);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

if (mLastDownY == 0f && mDistance == 0) {

mLastDownY = event.getY();

return true;

}

break;

case MotionEvent.ACTION_CANCEL:

break;

case MotionEvent.ACTION_UP:

if (mDistance != 0) {

mStep = 1;

mPositive = (mDistance >= 0);

this.post(this);

return true;

}

mLastDownY = 0f;

mDistance = 0;

break;

case MotionEvent.ACTION_MOVE:

if (mLastDownY != 0f) {

mDistance = (int) (mLastDownY - event.getY());

if ((mDistance < 0 && getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0) || (mDistance > 0 && getLastVisiblePosition() == getCount() - 1)) {

mDistance /= 2;

scrollTo(0, mDistance);

return true;

}

}

mDistance = 0;

break;

}

return super.onTouchEvent(event);

}

public void run() {

mDistance += mDistance > 0 ? -mStep : mStep;

scrollTo(0, mDistance);

if ((mPositive && mDistance <= 0) || (!mPositive && mDistance >= 0)) {

scrollTo(0, 0);

mDistance = 0;

mLastDownY = 0f;

return;

}

mStep += 1;

this.postDelayed(this, 10);

}

}

然后看一下xml的布局:

复制代码 代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<com.example.multilistview.MyListView

android:id="@+id/listView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:choiceMode="singleChoice"

android:scrollbars="none"

android:divider="@drawable/listitem_divide"

android:listSelector="#00000000"

android:background="#e4e3de"

>

</com.example.multilistview.MyListView>

<com.example.multilistview.MyListView

android:id="@+id/subListView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="#e4e3de"

>

</com.example.multilistview.MyListView>

</LinearLayout>

两个自定义的listview 横向布局,然后是父listview的适配器

复制代码 代码如下:

public class MyAdapter extends BaseAdapter {

Context context;

LayoutInflater inflater;

String [] foods;

int last_item;

int [] images;

private int selectedPosition = -1;

public MyAdapter(Context context,String [] foods,int[] images){

this.context = context;

this.foods = foods;

this.images = images;

inflater=LayoutInflater.from(context);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return foods.length;

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

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

// TODO Auto-generated method stub

ViewHolder holder = null;

if(convertView==null){

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

holder = new ViewHolder();

holder.textView =(TextView)convertView.findViewById(R.id.textview);

holder.imageView =(ImageView)convertView.findViewById(R.id.imageview);

holder.layout=(LinearLayout)convertView.findViewById(R.id.colorlayout);

convertView.setTag(holder);

}

else{

holder=(ViewHolder)convertView.getTag();

}

// 设置选中效果

if(selectedPosition == position)

{

holder.textView.setTextColor(Color.BLUE);

holder.layout.setBackgroundColor(Color.LTGRAY);

} else {

holder.textView.setTextColor(Color.WHITE);

holder.layout.setBackgroundColor(Color.TRANSPARENT);

}

holder.textView.setText(foods[position]);

holder.textView.setTextColor(Color.BLACK);

holder.imageView.setBackgroundResource(images[position]);

return convertView;

}

public static class ViewHolder{

public TextView textView;

public ImageView imageView;

public LinearLayout layout;

}

public void setSelectedPosition(int position) {

selectedPosition = position;

}

}

对应的 item布局:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/colorlayout"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<ImageView

android:id="@+id/imageview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="10dip"

android:layout_marginTop="5dip"

/>

<TextView

android:id="@+id/textview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=""

android:textSize="16dip"

android:layout_marginTop="8dip"

android:layout_marginLeft="8dip"

android:layout_marginBottom="8dip"/>

<>

</LinearLayout>

然后是子适配器代码:

复制代码 代码如下:

public class SubAdapter extends BaseAdapter {

Context context;

LayoutInflater layoutInflater;

String[][] cities;

public int foodpoition;

public SubAdapter(Context context, String[][] cities,int position) {

this.context = context;

this.cities = cities;

layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.foodpoition = position;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return cities.length;

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return getItem(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

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

// TODO Auto-generated method stub

ViewHolder viewHolder = null;

final int location=position;

if (convertView == null) {

convertView = layoutInflater.inflate(R.layout.sublist_item, null);

viewHolder = new ViewHolder();

viewHolder.textView = (TextView) convertView

.findViewById(R.id.textview1);

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

viewHolder.textView.setText(cities[foodpoition][position]);

viewHolder.textView.setTextColor(Color.BLACK);

return convertView;

}

public static class ViewHolder {

public TextView textView;

}

}

对应的xml布局:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

>

<TextView

android:id="@+id/textview1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="aaaaa"

android:textSize="16dip"

android:layout_marginTop="10dip"

android:layout_marginLeft="8dip"

android:layout_marginBottom="8dip"/>

</LinearLayout>

最后看下主activity的实现代码

复制代码 代码如下:

public class MainActivity extends Activity {

private MyListView listView;

private MyListView subListView;

private MyAdapter myAdapter;

private SubAdapter subAdapter;

String cities[][] = new String[][] {

new String[] {"全部美食", "本帮江浙菜", "川菜", "粤菜", "湘菜","东北菜","台湾菜","新疆/清真","素菜","火锅","自助餐","小吃快餐","日本","韩国料理",

"东南亚菜","西餐","面包甜点","其他"},

new String[] {"全部休闲娱乐","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部购物", "综合商场", "服饰鞋包", "运动户外","珠宝饰品","化妆品","数码家电","亲子购物","家居建材"

,"书店","书店","眼镜店","特色集市","更多购物场所","食品茶酒","超市/便利店","药店"},

new String[] {"全部休闲娱乐","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全","咖啡厅","酒吧","茶馆","KTV","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部","咖啡厅","酒吧","茶馆","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部休","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部休闲","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部休闲娱","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏"},

new String[] {"全部休闲娱乐","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏","更多休闲娱乐"},

new String[] {"全部休闲aaa","咖啡厅","酒吧","茶馆","KTV","电影院","游乐游艺","公园","景点/郊游","洗浴","足浴按摩","文化艺术",

"DIY手工坊","桌球馆","桌面游戏"},

};

String foods[] =new String []{"全部频道","美食","休闲娱乐","购物","酒店","丽人","运动健身","结婚","亲子","爱车","生活服务"};

int images[] = new int[]{R.drawable.ic_category_0,R.drawable.ic_category_10,R.drawable.ic_category_30,R.drawable.ic_category_20

,R.drawable.ic_category_60,R.drawable.ic_category_50,R.drawable.ic_category_45,R.drawable.ic_category_50,R.drawable.ic_category_70,

R.drawable.ic_category_65,R.drawable.ic_category_80};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

myAdapter=new MyAdapter(getApplicationContext(), foods, images);

listView.setAdapter(myAdapter);

selectDefult();

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int position,

long arg3) {

// TODO Auto-generated method stub

final int location=position;

myAdapter.setSelectedPosition(position);

myAdapter.notifyDataSetInvalidated();

subAdapter=new SubAdapter(getApplicationContext(), cities, position);

subListView.setAdapter(subAdapter);

subListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1,

int position, long arg3) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), cities[location][position], Toast.LENGTH_SHORT).show();

}

});

}

});

}

private void init(){

listView=(MyListView) findViewById(R.id.listView);

subListView=(MyListView) findViewById(R.id.subListView);

}

private void selectDefult(){

final int location=0;

myAdapter.setSelectedPosition(0);

myAdapter.notifyDataSetInvalidated();

subAdapter=new SubAdapter(getApplicationContext(), cities, 0);

subListView.setAdapter(subAdapter);

subListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1,

int position, long arg3) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), cities[location][position], Toast.LENGTH_SHORT).show();

}

});

}

}

默认我选中了第0个,下面看一下运行效果:

android二级listview列表实现代码2

【android二级listview列表实现代码】相关文章:

Android中获得手机屏幕大小实现代码

android panellistview 圆角实现代码

Android开发:优化ListView实践解析

Android列表实现(3)_自定义列表适配器思路及实现代码

Android开场动画实例类Java代码

Android列表实现(2)_游标列表案例讲解

Android 五种布局模式

Android 通用型手电筒代码

Android中利用App实现消息推送机制的代码

Android双击退出Activity的类代码

精品推荐
分类导航