1.效果图

2. 布局文件

1)显示筛选的标题

<?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:orientation="vertical"
android:layout_margin="@dimen/outer_border_width" > <RelativeLayout
android:id="@+id/titlebar"
android:layout_width="match_parent" android:layout_height="@dimen/titlebar_height"
android:background="@color/vi_color" > <ImageView
android:id="@+id/arrowLeftImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:src="@drawable/icon_arrow_left_white" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:text="筛选"
android:textColor="@color/White"
android:textSize="@dimen/titlebar_title_text_size" /> <TextView
android:id="@+id/tvOk"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/sel_titlebar_menu_bg"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:paddingLeft="@dimen/titlebar_menu_padding"
android:paddingRight="@dimen/titlebar_menu_padding"
android:text="@string/ok"
android:textColor="@drawable/sel_titlebar_menu_color"
android:textSize="@dimen/titlebar_menu_text_size" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/divider_line_width"
android:background="@color/divider_line_color" /> <ListView
android:id="@+id/lvFilterTitles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:layoutAnimation="@anim/layout_anim_controller" />
</LinearLayout>

2)dialog里的列表

<?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="wrap_content"
android:background="@color/White"
android:gravity="center"
android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/White"
android:gravity="center"
android:weightSum="2"
android:orientation="horizontal" >
<TextView
android:id = "@+id/tvDialogTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:textSize="@dimen/title_2_text_size"
/>
<View
android:layout_width="2px"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@color/divider_line_color" />
<TextView
android:id = "@+id/tvOk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ok"
android:gravity="center"
android:textColor="@color/vi_color"
android:layout_weight="1"
android:textSize="@dimen/title_2_text_size"
/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/divider_line_width"
android:layout_marginTop="0dp"
android:background="@color/divider_line_color" />"
<ListView
android:id="@+id/lvFilter"
android:layout_width="fill_parent"
android:layout_height="250dp"
android:layout_gravity="center"
android:cacheColorHint="#00000000" >
</ListView> </LinearLayout>

3. java 代码实现

比较关键的部分已标色,觉得有用的可以自己研究下,改改就可以直接用了.

public class FilterActivity extends Activity implements OnClickListener {

    private static final String TAG = "FilterActivity";
public static final String FILTER_STRING = "filter_string";
public static final int FILTER_RESULT_CODE = 99;
private AlertDialog builder;
private ListView dialogLv;
private TextView mTvCity;
private TextView mTvDialogTitle;
private Context mContext;
private ListView mLvFilterTitles; private int mFilterItemIndex = -1;
private ArrayList<FilterItem> mFilterItems = new ArrayList<FilterItem>();
private ArrayList<String> mHospitalNames = null;
private ArrayList<Hospital> mHospitalList = null;
private FilterTitleAdapter adapter;
private FilterTitleAdapter filterTitleAdapter;
private TextView mTvOk;
private ImageView mIvBack;
private String mFilterString;
private HashMap<String, String> mFilterKeyMap = new HashMap<String,String>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filter); mContext = this;
initFilterKeyMap();
mLvFilterTitles = (ListView)findViewById(R.id.lvFilterTitles);
mTvOk = (TextView)findViewById(R.id.tvOk);
mIvBack = (ImageView)findViewById(R.id.arrowLeftImg);
mTvOk.setOnClickListener(this);
mIvBack.setOnClickListener(this);
filterTitleAdapter = new FilterTitleAdapter();
mLvFilterTitles.setAdapter(filterTitleAdapter);
mLvFilterTitles.setOnItemClickListener(new OnItemClickListener(){ @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mFilterItemIndex = position; //标记位置以便返回选中值
buildDialog();
}
});
}
private void buildDialog() {
builder = new AlertDialog.Builder(this).create();
builder.show();
LayoutInflater inflater = LayoutInflater.from(this);
final View viewDialog = inflater.inflate(R.layout.dialog_filter, null); mTvDialogTitle = (TextView)viewDialog.findViewById(R.id.tvDialogTitle); builder.setContentView(viewDialog); builder.getWindow().setGravity(Gravity.BOTTOM);
dialogLv = (ListView) viewDialog.findViewById(R.id.lvFilter);
TextView dialogOk = (TextView) viewDialog.findViewById(R.id.tvOk);
dialogOk.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
builder.dismiss();
}
}); String titleName = mFilterItems.get(mFilterItemIndex).name;
String titleEName = mFilterItems.get(mFilterItemIndex).eName;
mTvDialogTitle.setText(titleName);
// 这个listview的用法没啥好说的,在这用的是android自带的适配模式
dialogLv.setAdapter(new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1, getDialogLvData(titleEName)));
dialogLv.setOnItemClickListener(new OnItemClickListener(){ @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView)viewDialog.findViewById(view.getId());
tv = (TextView)view.findViewById(android.R.id.text1);
Toast.makeText(mContext, "点了 "+ position+ " "+tv.getText(), 0).show();
//这里在点击后,更新上一层listview里的数据,这样就达到同步的效果了
mFilterItems.get(mFilterItemIndex).content = (String) tv.getText();
filterTitleAdapter.notifyDataSetChanged();
}
});
} private void initFilterKeyMap(){
mFilterKeyMap.put("city", "城市");
mFilterKeyMap.put("sex", "性别");
mFilterKeyMap.put("star_level", "星级");
mFilterKeyMap.put("age", "年龄");
mFilterKeyMap.put("hospital", "医院");
} private List<String> getDialogLvData(String key){
List<String> data = new ArrayList<String>();
switch (key){
case "city":
data.add("深圳");
break;
case "sex":
data.add("男");
data.add("女");
break;
case "star_level":
data.add("1");
data.add("2");
data.add("3");
data.add("4");
data.add("5");
break;
case "age":
data.add("20 - 29");
data.add("30 - 39");
break;
case "hospital":
break;
}
return data;
} private class FilterTitleAdapter extends BaseAdapter { public FilterTitleAdapter() {
super(); for(Map.Entry<String, String> entry : mFilterKeyMap.entrySet()){
FilterItem item = new FilterItem();
item.name = entry.getValue();
item.eName = entry.getKey();
mFilterItems.add(item) ;
}
} @Override
public int getCount() {
return mFilterItems.size();
} @Override
public FilterItem getItem(int position) {
return mFilterItems.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
convertView = View.inflate(mContext, R.layout.list_item_filter_title, null);
holder.mTvFilterName = (TextView) convertView.findViewById(R.id.filterItemText);
holder.mTvFilterContent = (TextView) convertView.findViewById(R.id.filterItemContent);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
FilterItem fi = mFilterItems.get(position);
holder.mTvFilterName.setText(fi.name);
holder.mTvFilterContent.setText(fi.content);
return convertView;
} } private class ViewHolder {
TextView mTvFilterContent;
TextView mTvFilterName;
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.arrowLeftImg:
this.onBackPressed();
break;
case R.id.tvOk: //返回上一界面并传回数据
getFilterString();
Intent i;
i = this.getIntent();
i.putExtra(FILTER_STRING, mFilterString);
this.setResult(FILTER_RESULT_CODE, i);
finish();
break;
default:
break;
} } }

android dialog 筛选列表的更多相关文章

  1. Android Dialog使用举例

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,在我们使用Android的过程中,我归纳了一 ...

  2. 自定义android Dialog

    1.自定义Dialog: import android.app.AlertDialog; import android.app.Dialog; import android.content.Conte ...

  3. Android控件——7种形式的Android Dialog使用举例(转载)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,在我们使用Android的过程中,我归纳了一 ...

  4. Android Dialog对话框的七种形式的使用

    参考资料:http://www.oschina.net/question/54100_32486 注:代码进行了整理 在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询 ...

  5. 8种形式的Android Dialog使用举例

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,在我们使用Android的过程中,我归纳了一 ...

  6. fir.im Weekly - 2016 年 Android 最佳实践列表

    2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...

  7. Android一个ListView列表之中插入两种不同的数据

    http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据 代码如下: public class ViewHolder{ Butto ...

  8. android搜索框列表布局,流程及主要步骤思维导图

    android搜索框列表布局,流程及主要步骤思维导图 android搜索框列表布局,流程及主要步骤思维导图 activity_coin_search.xml----------<com.scwa ...

  9. Android Dialog 创建上下文菜单

    Android Dialog中的listview创建上下文菜单 listView.setOnCreateContextMenuListener(new OnCreateContextMenuListe ...

随机推荐

  1. python函数调用关系图(python call graph)

    由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具.(内网没装好graphviz,还没真正用 ...

  2. 1193: [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 915[Submit][Statu ...

  3. [2018集训队作业][UOJ450] 复读机 [DP+泰勒展开+单位根反演]

    题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$ ...

  4. 二叉树中和为某一值得路径 java实现

    本题来自<剑指offer> 路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点 因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节 ...

  5. 【题解】Huge Mods UVa 10692 欧拉定理

    题意:计算a1^( a2^( a3^( a4^( a5^(...) ) ) ) ) % m的值,输入a数组和m,不保证m是质数,不保证互质 裸的欧拉定理题目,考的就一个公式 a^b = a^( b % ...

  6. HBase工具之监控Region的可用和读写延时状况

    1.介绍HBase集群上region数目由于业务驱动而越来越多,由于服务器本身,网络以及hbase内部的一些不确定性bug等因素使得这些region可能面临着不可用或响应延时情况.通过对region的 ...

  7. 前后端分离中,gulp实现头尾等公共页面的复用 前言

    前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果前后端分离时,制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面 ...

  8. python---aiohttp的使用

    1.aiohttp的简单使用(配合asyncio模块) import asyncio,aiohttp async def fetch_async(url): print(url) async with ...

  9. ZooKeeper观察者(十三)

    观察者:扩展ZooKeeper而不影响写性能 尽管ZK运行地很好通过客户端直接连接来投票集群的成员,这个结构使它很难扩展出很多客户端.问题是当我们加入更多的投票成员时,写性能就会下降.这是因为一个写操 ...

  10. MySQL查看所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...