亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android二級listview列表實現代碼

2020-04-11 12:37:26
字體:
來源:轉載
供稿:網友
今天來實現以下大眾點評客戶端的橫向listview二級列表,先看一下樣式。
 
這種橫向的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"/>
<!-- android:background="@drawable/selector" 自定義listview 樣式-->
</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個,下面看一下運行效果:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品制服第一页| 一区二区亚洲精品国产| 国产精品久久久久福利| 日韩免费中文字幕| 国产a∨精品一区二区三区不卡| 亚洲综合精品一区二区| 亚洲一区二区三区视频| 国产精品女人网站| 精品国产欧美一区二区五十路| 国产一区二区三区丝袜| 中文字幕欧美精品日韩中文字幕| 国产精品精品一区二区三区午夜版| 亚洲视频日韩精品| 555www成人网| 久久久久久噜噜噜久久久精品| 久久综合伊人77777尤物| 91精品视频在线播放| 韩国三级日本三级少妇99| 亚洲天堂男人天堂| 尤物99国产成人精品视频| 欧美视频免费在线| 亚洲精品久久久久中文字幕二区| 国产手机视频精品| 伊人亚洲福利一区二区三区| 亚洲第一偷拍网| 日本精品一区二区三区在线| 亚洲国产成人91精品| 黄色成人在线播放| 97久久国产精品| 91伊人影院在线播放| 亚洲乱亚洲乱妇无码| 日韩高清不卡av| 91精品国产一区| 欧美肥臀大乳一区二区免费视频| 久久福利视频导航| 9.1国产丝袜在线观看| 成人精品视频99在线观看免费| 欧美成人精品不卡视频在线观看| 91精品国产高清久久久久久久久| 成人信息集中地欧美| 亚洲精品久久在线| 欧美国产一区二区三区| 精品欧美一区二区三区| 日韩电影中文字幕在线| 国产亚洲精品久久久久动| 中文字幕在线亚洲| 成人看片人aa| 国产热re99久久6国产精品| 国产亚洲精品一区二555| 国产精品1区2区在线观看| 亚洲福利小视频| 日韩女优人人人人射在线视频| 亚洲深夜福利视频| 日本一欧美一欧美一亚洲视频| 亚洲天堂2020| 久久久久久久久久久久久久久久久久av| 亚洲精品一区av在线播放| 91亚洲午夜在线| 国内精品视频久久| 91av在线精品| 亚洲性线免费观看视频成熟| 欧美激情久久久久| 国产一区二区三区丝袜| 日韩av手机在线看| 日韩在线视频国产| 国产精品www| 日本一区二区在线免费播放| 成人激情在线观看| 韩国一区二区电影| 国产97在线亚洲| 国产日韩换脸av一区在线观看| 亚洲网址你懂得| 国产又爽又黄的激情精品视频| 日韩欧美在线免费| 91精品免费久久久久久久久| 2019国产精品自在线拍国产不卡| 26uuu日韩精品一区二区| 日韩大陆欧美高清视频区| 国模精品一区二区三区色天香| 日韩福利在线播放| 久久视频这里只有精品| 欧美电影免费观看大全| 亚洲摸下面视频| 亚洲欧美中文字幕| 亚洲色图35p| 精品中文字幕在线观看| 久久福利视频导航| 日韩欧美a级成人黄色| 欧美国产日韩一区| 欧美亚洲激情视频| 91青草视频久久| 日本中文字幕久久看| 亚洲高清福利视频| 欧美日韩一区免费| 久久亚洲精品中文字幕冲田杏梨| 亚洲有声小说3d| 日韩**中文字幕毛片| 理论片在线不卡免费观看| 国产精品视频网站| 91超碰中文字幕久久精品| 日韩精品视频免费专区在线播放| 国产精品无码专区在线观看| 久99九色视频在线观看| 国产性猛交xxxx免费看久久| 国产精品观看在线亚洲人成网| 亚洲国产婷婷香蕉久久久久久| 国产成人精品久久亚洲高清不卡| 亚洲天堂一区二区三区| 高清在线视频日韩欧美| 日韩av中文字幕在线免费观看| 欧美另类极品videosbest最新版本| 色噜噜狠狠色综合网图区| 久久青草精品视频免费观看| 91精品在线播放| 亚洲欧美日韩视频一区| 日本老师69xxx| 38少妇精品导航| 欧美午夜久久久| 最近的2019中文字幕免费一页| 欧美成人手机在线| 一区二区三区高清国产| 日韩欧美在线一区| 欧美美最猛性xxxxxx| 欧美性xxxxxx| 国产精品久久99久久| 精品久久久久人成| 亚洲男人的天堂在线| 91精品久久久久久久| 久久欧美在线电影| 亚洲国产天堂网精品网站| 国产日韩欧美中文| 不卡在线观看电视剧完整版| 色妞久久福利网| 伊人久久大香线蕉av一区二区| 全亚洲最色的网站在线观看| 国产精品久久久久久av| 亚洲一区www| 欧洲永久精品大片ww免费漫画| 欧美成人激情在线| 国产欧美日韩精品丝袜高跟鞋| 日韩av电影在线播放| 欧美激情一区二区三区高清视频| 成人福利在线视频| 欧美一级视频免费在线观看| 亚洲国产日韩欧美在线动漫| 国产精品第2页| 中文字幕成人在线| 久久久av网站| 亚洲免费人成在线视频观看| 国产精品电影久久久久电影网| 亚洲a∨日韩av高清在线观看| 91久久久国产精品| 国产91精品网站| 亚洲自拍欧美另类| 91精品视频在线免费观看| 97久久久免费福利网址| 欧美性猛交xxxx免费看久久久| 国产精品久久久久久久久久东京| 亚洲一区二区三区777| 福利视频一区二区| 亚洲国产天堂久久国产91| 日韩在线视频国产| 欧美性猛交xxxx乱大交极品| 国产成人精品av在线|