SideBar+ListView
来源:互联网 发布:韩国历史教科书知乎 编辑:程序博客网 时间:2024/05/16 23:37
关键代码
根据手指在sidebar上滑动 列表更随移动
city.json 是从ios系统里拿出来的文件
public class MainActivity extends AppCompatActivity implements ISideBar { private TextView showTv; private SideBar bar; private SortAdapter adapter; private CityRes commentRes; private List<SortMode> data; private ListView list; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { data = initCityData(commentRes.getCitylist()); //数据放在适配器里面之前要先排序 Collections.sort(data, new PinyinComparator()); adapter = new SortAdapter(MainActivity.this, data); list.setAdapter(adapter); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initListener(); } private void initView() { bar = (SideBar) findViewById(R.id.slidBar); showTv = (TextView) findViewById(R.id.showTv); list = (ListView) findViewById(R.id.list); } private void initData() { adapter = new SortAdapter(this,data); //在解析json数据比较慢,差的手机容易ANR,开线程来解析然后去 //handler更新数据 new Thread(new Runnable() { @Override public void run() { Gson resultGson = new Gson(); String jsonData = UtilsString.getStrFromAssets(MainActivity.this, "city.json"); commentRes = resultGson.fromJson(jsonData, CityRes.class); handler.sendEmptyMessageDelayed(0, 100); } }).start(); } private void initListener() { bar.setListener(this); } private List<SortMode> initCityData(List<CitylistDto> citylist) { List<SortMode> mLists = new ArrayList<SortMode>(); for (int i = 0; i < citylist.size(); i++) { for (int n = 0; n < citylist.get(i).getCities().size(); n++) { SortMode mode = new SortMode(); mode.setName(citylist.get(i).getCities().get(n).getName()); mode.setSortLetter(citylist.get(i).getAZ()); mode.setCityID(citylist.get(i).getCities().get(n).getCityID()); mode.setCitycode(citylist.get(i).getCities().get(n).getCitycode()); mode.setPyf(citylist.get(i).getCities().get(n).getPyf()); mode.setPys(citylist.get(i).getCities().get(n).getPys()); mLists.add(mode); } } return mLists; } @Override public void onTouchLetterChanged(String s) { showTv.setText(s); showTv.setVisibility(View.VISIBLE); int position = adapter.getPositionForSelection(s.charAt(0)); if (position != -1) { list.setSelection(position); } } @Override public void onTouchUpInVisibility() { showTv.setText(""); showTv.setVisibility(View.INVISIBLE); }}
public class SortAdapter extends BaseAdapter { private Context context; private List<SortMode> modes; private LayoutInflater inflater; public SortAdapter(Context context, List<SortMode> modes){ this.context = context; this.modes = modes; this.inflater = LayoutInflater.from(context); } public int getCount() { return modes.size(); } public Object getItem(int position) { return modes.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { //每个条目长什么样子 ViewHolder holder = null; SortMode sortMode = modes.get(position); if(convertView == null){ holder = new ViewHolder(); convertView = inflater.inflate(R.layout.item_sidebar, null); holder.tvLetter = (TextView) convertView.findViewById(R.id.catalog); holder.tvName = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } //获取首字母的assii 值 int selection = sortMode.getSortLetter().charAt(0); //通过首字母的assii值来判断哪个position要显示字母 int positionForSelection = getPositionForSelection(selection); if(position == positionForSelection){ //说明该条目符合显示字母的条件 holder.tvLetter.setVisibility(View.VISIBLE); holder.tvLetter.setText(sortMode.getSortLetter()); }else{ holder.tvLetter.setVisibility(View.GONE); } holder.tvName.setText(sortMode.getName());//设置名字 return convertView; } public int getPositionForSelection(int selection) { for(int i = 0;i<getCount();i++){ String sortName = modes.get(i).getSortLetter(); char firstLetter = sortName.toUpperCase().charAt(0); if(firstLetter == selection){ return i; } } return -1; } class ViewHolder{ TextView tvLetter; TextView tvName; }}
public static String getStrFromAssets(Context context,String name) { String jsonString = ""; String resultString = ""; try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(context.getClass().getClassLoader().getResourceAsStream("assets/" + name))); while ((jsonString = bufferedReader.readLine()) != null) { resultString += jsonString; } } catch (IOException e) { e.printStackTrace(); } return resultString; }
public class PinyinComparator implements Comparator<SortMode> { public int compare(SortMode lhs, SortMode rhs) { return lhs.getSortLetter().compareTo(rhs.getSortLetter()); }}
https://github.com/weikaino1/SideBarDemo
0 0
- SideBar+ListView
- SideBar
- SideBar
- SideBar
- Android ListView侧边字母索引栏SideBar控件的实现
- div#sidebar{}与#sidebar div{}的区别
- div#sidebar{}与#sidebar div{}的区别
- MarkerManager and Sidebar
- SideBar设计案例
- DotNetBar 实现动态SideBar
- Qt:创建SideBar
- Vertical Sidebar Menu
- Qt:创建SideBar
- sublime的sidebar自定义
- SideBar shopping cart file
- Magento定制Sidebar
- 通讯录--快速导航(SideBar)
- 自己动手做sidebar
- mysql数据库深入了解
- laravel字段自增/自减
- 背包问题(转载并且加上了自己的一些思路)
- 关于dialogbox
- mysql语句及其分类(DQL)
- SideBar+ListView
- Dagger2框架入门使用
- 正确的使用eval()
- pads规则(对某一个元件单独设计规则)
- Web API接口设计经验总结
- APM 被监控应用的方法拦截
- RegSetValueEx出错的问题
- 吐槽前端组件化的踩坑之路
- 高效阅读一本书的四个层次