Git Product home page Git Product logo

indexablerecyclerview's Introduction

IndexableRecyclerView

A RecyclerView with indexable, sticky and many other features.

轻松实现:选择城市,选择联系人等需要索引的功能

替代之前的IndexableStickyListView(移至该分支),进行大幅度重构,性能优化,更易使用的API,更易拓展的HeaderView/FooterView等等! 重构历程可以看这篇文章:[设计模式]记一次开源库的重构历程

Demo演示

特性

1、根据数据源,自动排序生成字母索引Bar(非字母开头,索引为"#",另可自由定制),以及HeaderTitle

2、非常自由的 添加各种HeaderView/FooterView,包括自定义索引,HeaderTitle,各种View等等

3、HeaderTitle是粘性的(Sticky)

4、UI自由定制、拓展;提供2种悬浮提示View,常规居中 以及 MD风格的右侧气泡

5、绑定数据源,通过单线程的线程池优化,不怕重复绑定数据

6、使用TinyPinyin代替Pinyin4j.jar库,体积更小,拼音转化速度提升4倍!

更新日志

1.3.0

  • 多音字借助TinyPinyin处理
  • 可以自定义排序方式

1.2.4

  • Fix 数据变动时,StickTitle不及时更新问题;增加2处安全校验

1.2.0

1.0.7

  • 默认不再显示左侧的悬浮气泡
  • 默认排序方式改为快速排序,提供一个MODE_NONE的排序方式

1.0.5 为HeaderView/FooterView添加:

  • indexableLayout.removeHeaderAdapter();
  • headerAdapter.addData()
  • headerAdapter.removeData()

如何使用

gradle

项目下app的build.gradle中依赖:

 compile 'me.yokeyword:indexablerecyclerview:1.3.0'
 compile 'com.android.support:appcompat-v7:你使用的版本号'
 compile 'com.android.support:recyclerview-v7:你使用的版本号'

Xml

 <me.yokeyword.indexablerv.IndexableLayout
     ...
     app:indexBar_layout_width="24dp"           // IndexBar:width
     app:indexBar_background="#08000000"        // IndexBar:background
     app:indexBar_textColor="#000000"           // IndexBar:textColor
     app:indexBar_selectedTextColor="#f33737"   // IndexBar:isSelected textColor
     app:indexBar_textSize="14sp"               // IndexBar:textSize
     app:indexBar_textSpace="6dp" />            // IndexBar:text lineSpace

3步集成

1、实体类实现IndexableEntity

public class CityEntity implements IndexableEntity {
    ...
    private String name;
    private String pinyin;
    
    @Override
    public String getFieldIndexBy() {
        return name;  // return 你需要根据该属性排序的field
    }

    @Override
    public void setFieldIndexBy(String indexByField) {
        this.name = indexByField; // 同上
    }

    @Override
    public void setFieldPinyinIndexBy(String pinyin) {
        this.pinyin = pinyin; // 保存排序field的拼音,在执行比如搜索等功能时有用 (若不需要,空实现该方法即可)
    }
}

2、继承IndexAdapter

public class CityAdapter extends IndexableAdapter<CityEntity> {
    @Override
    public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) {
        // 创建 TitleItem 布局
    }

    @Override
    public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) {
        // 创建 内容Item 布局
    }

    @Override
    public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) {
         // 填充 TitleItem 布局
    }

    @Override
    public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) {
        // 填充 内容Item 布局
    }
}

3、绑定视图和数据

// 支持LinearLayoutManager, GridLayoutManager
indexableLayout.setLayoutManager(LayoutManager);

CityAdapter adapter = new CityAdapter(this);
indexableLayout.setAdapter(adapter);
// 排序过程是异步的 另有setDatas(mDatas,IndexCallback callback)  // callback在datas异步排序结束后回调
adapter.setDatas(mDatas);
// 另有setOnItemTitleClickListener(listener),点击TitleItem点击事件以及LongClick
adapter.setOnItemContentClickListener(listener);

拓展

1、设置 索引悬浮提示框 风格

// 前者Material Design风格右侧气泡 , 后者 居中 IOS风格气泡
indexableLayout.setOverlayStyle_MaterialDesign(int Color) & setOverlayStyle_Center()

2、多音字处理

多音字处理得益于使用了TinyPinyin,可以如下设置:

// 添加中文城市词典
Pinyin.init(Pinyin.newConfig().with(CnCityDict.getInstance());

// 添加自定义词典
Pinyin.init(Pinyin.newConfig()
            .with(new PinyinMapDict() {
                @Override
                public Map<String, String[]> mapping() {
                    HashMap<String, String[]> map = new HashMap<String, String[]>();
                    map.put("重庆",  new String[]{"CHONG", "QING"});
                    return map;
                }
            }));

3、添加自定义HeaderView,FooterView

indexableLayout.addHeaderAdapter(IndexableHeaderAdapter adapter)    // 添加HeaderView
indexableLayout.addFooterAdapter(IndexableFooterAdapter adapter)    // 添加FooterView

// 3个参数分别对应:IndexBar的索引,HeaderTitle,传入的Header数据源,此处泛型T可以是任何实体类,不需要和主Adapter类型一致
// 如果不想显示某块视图,则传入null即可: 比如不想显示 HeaderTitle, 则indexTitle传入null;
IndexableHeaderAdapter<T>(String index, String indexTitle, List<T> datas){
    // 需要实现3个方法:
    public abstract int getItemViewType(); // 每个HeaderView的type应当不同
    public abstract RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent);
    public abstract void onBindContentViewHolder(RecyclerView.ViewHolder holder, T entity);
}

// 如果想添加的HeaderView,和主Adapter的布局完全一致,则可以使用:
new SimpleHeaderAdapter(IndexableAdapter<T> adapter, String index, String indexTitle, List<T> datas);

4、更改排序规则

默认根据全拼音排序,可根据需求更改为按首字母排序:

// 设置排序规则: 
// MODE_FAST:按首字母排序(默认);MODE_ALL_LETTERS:全字母比较,效率较低; MODE_NONE:字母模块内不排序,效率最高
indexableLayout.setCompareMode(@CompareMode int mode);

// 自定义排序规则
indexableLayout.setComparator(yourComparator);

更多细节使用,参见Demo

致谢

TinyPinyin

indexablerecyclerview's People

Contributors

alwaystest avatar guodongandroid avatar sysmain avatar yokeyword avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

indexablerecyclerview's Issues

Crash[The content of the adapter has changed but ListView did not receive a notification.]

例子中的:
点击[选择联系人DEMO] --> back --> 点击[选择联系人DEMO] , 几次就会crash。麻烦查下
设备:HM NOTE1
日志:


E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.yokeyword.indexablelistview.sample, PID: 5812
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(-1, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1555)
at android.widget.AbsListView.onLayout(AbsListView.java:2089)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14845)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2030)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1787)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1043)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5652)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5113)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)

java.lang.IllegalStateException

您好,使用时报错:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3938)
at android.view.ViewGroup.addView(ViewGroup.java:3788)
at android.view.ViewGroup.addView(ViewGroup.java:3729)
at me.yokeyword.indexablelistview.IndexableStickyListView.updateListView(IndexableStickyListView.java:465)
at me.yokeyword.indexablelistview.IndexableStickyListView.access$400(IndexableStickyListView.java:35)
at me.yokeyword.indexablelistview.IndexableStickyListView$BindDatasHanlder$1.run(IndexableStickyListView.java:278)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

请问这个该怎么解决

IndexBar索引问题

你好,手机联系人名称另类的用户用类似❤emjoy开头,自动生成索引会乱码😢。能否在setFirstSpell时判断不是[A-Z]的用#代替。

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(-1, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]

Meizu M571C Android 5.1,API 22

通过测试,只有魅族的才会出现这样的的问题。 @YoKeyword 换成6.7的版本后底部的loading不消失,搜索也不生效。

不好使啊各种报错

02-20 14:06:06.709 818-3775/? E/ActivityManager: Invalid thumbnail dimensions: 0x0
02-20 14:06:06.759 818-3617/? E/ActivityManager: Invalid thumbnail dimensions: 0x0
02-20 14:06:10.539 6820-6820/? E/MarketLocalAppManager: getDetailAppInfo null: com.wyys.seller
02-20 14:06:10.629 6820-7141/? E/MarketDataParser: [AppList] JSON : list is null
No value for miuiApp

                                               [ 02-20 14:06:10.629 14319:14319 W/         ]
                                               [ColorAdjust] Set temp_prefer temp_ce!

02-20 14:06:10.709 6820-7106/? E/MarketDataParser: [AppList] JSON : list is null
No value for listApp
02-20 14:06:10.999 818-4948/? E/ActivityManager: Invalid thumbnail dimensions: 0x0
02-20 14:06:11.059 14337-14347/? E/art: Failed sending reply to debugger: Broken pipe
02-20 14:06:19.099 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=3.97 rxSuccessRate=5.16 targetRoamBSSID=any RSSI=-42
02-20 14:06:19.099 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:06:39.099 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.57 rxSuccessRate=5.99 targetRoamBSSID=any RSSI=-44
02-20 14:06:39.099 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:06:54.709 14337-14337/com.wyys.seller E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wyys.seller, PID: 14337
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wyys.seller/com.wyys.seller.ProvingActivity}: android.view.InflateException: Binary XML file line #29: Error inflating class me.yokeyword.indexablerv.IndexableLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
at android.app.ActivityThread.access$800(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5290)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class me.yokeyword.indexablerv.IndexableLayout
at android.view.LayoutInflater.createView(LayoutInflater.java:637)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:747)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:508)
at android.view.LayoutInflater.inflate(LayoutInflater.java:418)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
at com.wyys.seller.ProvingActivity.onCreate(ProvingActivity.java:36)
at android.app.Activity.performCreate(Activity.java:6039)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404) 
at android.app.ActivityThread.access$800(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5290) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:611)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:747) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:508) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:418) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
at com.wyys.seller.ProvingActivity.onCreate(ProvingActivity.java:36) 
at android.app.Activity.performCreate(Activity.java:6039) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404) 
at android.app.ActivityThread.access$800(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5290) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
Caused by: java.lang.NoSuchMethodError: No static method getColor(Landroid/content/Context;I)I in class Landroid/support/v4/content/ContextCompat; or its super classes (declaration of 'android.support.v4.content.ContextCompat' appears in /data/app/com.wyys.seller-1/base.apk)
at me.yokeyword.indexablerv.IndexableLayout.init(IndexableLayout.java:291)
at me.yokeyword.indexablerv.IndexableLayout.(IndexableLayout.java:116)
at me.yokeyword.indexablerv.IndexableLayout.(IndexableLayout.java:111)
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
at android.view.LayoutInflater.createView(LayoutInflater.java:611) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:747) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:508) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:418) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
at com.wyys.seller.ProvingActivity.onCreate(ProvingActivity.java:36) 
at android.app.Activity.performCreate(Activity.java:6039) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404) 
at android.app.ActivityThread.access$800(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5290) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
02-20 14:06:54.779 818-3299/? E/InputDispatcher: channel '23d5b9a1 com.wyys.seller/com.wyys.seller.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-20 14:06:57.979 818-3299/? E/ActivityManager: Invalid thumbnail dimensions: 0x0
02-20 14:06:59.099 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=5.38 targetRoamBSSID=any RSSI=-40
02-20 14:06:59.099 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:07:19.109 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=2.38 rxSuccessRate=6.49 targetRoamBSSID=any RSSI=-44
02-20 14:07:19.109 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:07:39.109 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=6.03 targetRoamBSSID=any RSSI=-47
02-20 14:07:39.109 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:07:59.109 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=3.04 targetRoamBSSID=any RSSI=-45
02-20 14:07:59.109 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:08:19.109 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=6.06 targetRoamBSSID=any RSSI=-43
02-20 14:08:19.109 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:08:39.119 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=4.09 targetRoamBSSID=any RSSI=-40
02-20 14:08:39.119 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:08:59.119 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=7.15 targetRoamBSSID=any RSSI=-41
02-20 14:08:59.119 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:09:19.119 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.53 rxSuccessRate=4.04 targetRoamBSSID=any RSSI=-46
02-20 14:09:19.119 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:09:39.119 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=3.06 targetRoamBSSID=any RSSI=-45
02-20 14:09:39.129 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:09:55.689 13300-13304/? E/QC-QMI: qmi_client [13300] 59: failed to locate client data
02-20 14:09:55.699 436-436/? E/QC-QMI: qmuxd: RX on fd=28 returned error=0 errno[2:No such file or directory]
02-20 14:09:55.699 436-436/? E/QC-QMI: QMUX qmux_client_id=59 not found in qmux client list, unable to remove

                                   [ 02-20 14:09:55.699 15508:15508 W/         ]
                                   [ColorAdjust] gammamode=2, cemode=10
                                   
                                   
                                   [ 02-20 14:09:55.699 15508:15508 W/         ]
                                   [ColorAdjust] temp_gammavalue=2, temp_cevalue=10
                                   
                                   
                                   [ 02-20 14:09:55.699 15508:15508 W/         ]
                                   [ColorAdjust] Don't setGamma!
                                   
                                   
                                   [ 02-20 14:09:55.699 15508:15508 W/         ]
                                   [ColorAdjust] Don't setCe!
                                   
                                   
                                   [ 02-20 14:09:55.719 15508:15508 W/         ]
                                   [ColorAdjust] Set temp_prefer temp_ce!

02-20 14:09:59.129 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.13 rxSuccessRate=1.83 targetRoamBSSID=any RSSI=-44
02-20 14:10:19.129 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=0.97 targetRoamBSSID=any RSSI=-51
02-20 14:10:19.129 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:10:39.129 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=5.66 targetRoamBSSID=any RSSI=-46
02-20 14:10:39.129 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:10:45.469 15625-15625/? E/ApplicationHelper: start process, name=com.miui.player
02-20 14:10:45.569 15625-15670/? E/RemoteConfigClientBase: com.miui.player: read config success!
02-20 14:10:45.639 15625-15679/? E/FFMPEGPlayer-JNI: JNI_OnLoad
02-20 14:10:45.799 15690-15690/? E/ApplicationHelper: start process, name=com.miui.player:remote
02-20 14:10:59.139 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.63 rxSuccessRate=3.64 targetRoamBSSID=any RSSI=-45
02-20 14:10:59.139 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:11:19.139 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=9.54 targetRoamBSSID=any RSSI=-49
02-20 14:11:19.139 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:11:39.139 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=3.04 targetRoamBSSID=any RSSI=-43
02-20 14:11:39.139 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:11:59.139 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.91 rxSuccessRate=2.49 targetRoamBSSID=any RSSI=-43
02-20 14:11:59.139 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:12:19.149 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=3.00 targetRoamBSSID=any RSSI=-47
02-20 14:12:19.149 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:12:39.149 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=3.91 targetRoamBSSID=any RSSI=-43
02-20 14:12:39.149 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:12:59.149 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=1.23 targetRoamBSSID=any RSSI=-41
02-20 14:12:59.149 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:13:19.159 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=6.74 targetRoamBSSID=any RSSI=-47
02-20 14:13:19.159 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:13:39.159 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=7.39 targetRoamBSSID=any RSSI=-46
02-20 14:13:39.159 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:13:59.159 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.31 rxSuccessRate=2.63 targetRoamBSSID=any RSSI=-44
02-20 14:13:59.159 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:14:19.169 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=2.00 rxSuccessRate=13.40 targetRoamBSSID=any RSSI=-45
02-20 14:14:19.169 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:14:39.169 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=7.13 targetRoamBSSID=any RSSI=-45
02-20 14:14:39.169 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:14:59.169 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.06 rxSuccessRate=2.95 targetRoamBSSID=any RSSI=-46
02-20 14:14:59.169 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:15:19.169 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=4.17 targetRoamBSSID=any RSSI=-48
02-20 14:15:19.169 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412
02-20 14:15:39.179 818-3308/? E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=6.79 targetRoamBSSID=any RSSI=-43
02-20 14:15:39.179 818-3308/? E/WifiStateMachine: WifiStateMachine starting scan for "angle2016"-WPA_PSK with 2412

IndexableLayout中有一行冗余代码

304和309行代码重复
` mRecy = new RecyclerView(context);
mIndexBar = new IndexBar(context);
mRecy.setVerticalScrollBarEnabled(false);
mRecy.setOverScrollMode(View.OVER_SCROLL_NEVER);
addView(mRecy, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

    mIndexBar = new IndexBar(context);
    mIndexBar.init(mBarBg, mBarTextColor, mBarFocusTextColor, mBarTextSize, mBarTextSpace);
    LayoutParams params = new LayoutParams((int) mBarWidth, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.END | Gravity.CENTER_VERTICAL;
    addView(mIndexBar, params);`

多音字的问题

比如 重庆、长安 就会出现 C开头 和 Z 开头 怎么能正确的识别多音字?

有两个问题请教

1.之前listview版本 当城市或联系人没有足够多的时候,右边的滑动条只显示存在的字母索引,新版无论什么情况都把a-z完全出来显示
2.在demo选择联系人界面里滑动索引从A到Z 不松手再划回来到A 此时“我关心的”这个title消失,并且没有点击事件,测试跟添加自定义的headadapter有关

不支持自动压缩宽高

无法做出类似gridview的等分效果 只能写死高度 ,麻烦。比如4个表格,设置了间距,match_parent 第4个 被索引覆盖了。

mMDOverlay Background Tint 设置无效

有些机型出现mMDOverlay出现设置Background Tint无效的情况,现象是mMDOverlay只有白色的背景图片。测试机型华为CHM-CL00,android版本4.4.4

发现一个闪退的bug

该情况再"选择联系人DEMO"模块偶尔会出现,以下是错误日志
09-13 18:20:08.708 25468-25468/com.yokeyword.indexablelistview.sample E/InputEventReceiver: Exception dispatching input event. 09-13 18:20:08.708 25468-25468/com.yokeyword.indexablelistview.sample E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 09-13 18:20:08.709 25468-25468/com.yokeyword.indexablelistview.sample E/MessageQueue-JNI: java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1 at java.util.ArrayList.get(ArrayList.java:310) at me.yokeyword.indexablelistview.IndexBar.processOverlayView(IndexBar.java:184) at me.yokeyword.indexablelistview.IndexBar.onTouchEvent(IndexBar.java:143) at android.view.View.dispatchTouchEvent(View.java:8668) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2539) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1807) at android.app.Activity.dispatchTouchEvent(Activity.java:2823) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2496) at android.view.View.dispatchPointerEvent(View.java:8874) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4724) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4582) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4134) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4100) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4237) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4108) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4294) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4134) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4100) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4108) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6538) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6512) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6465) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6718) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:148) at android.os.Looper.loop(Looper.java:151) at android.app.ActivityThread.main(ActivityThread.java:5824) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1010) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 09-13 18:20:08.710 25468-25468/com.yokeyword.indexablelistview.sample E/AndroidRuntime: FATAL EXCEPTION: main Process: com.yokeyword.indexablelistview.sample, PID: 25468 java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1 at java.util.ArrayList.get(ArrayList.java:310) at me.yokeyword.indexablelistview.IndexBar.processOverlayView(IndexBar.java:184) at me.yokeyword.indexablelistview.IndexBar.onTouchEvent(IndexBar.java:143) at android.view.View.dispatchTouchEvent(View.java:8668) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2114) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2539) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1807) at android.app.Activity.dispatchTouchEvent(Activity.java:2823) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2496) at android.view.View.dispatchPointerEvent(View.java:8874) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4724) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4582) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4134) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4100) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4237) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4108) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4294) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4134) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4100) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4108) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4081) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6538) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6512) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6465) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6718) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:148) at android.os.Looper.loop(Looper.java:151) at android.app.ActivityThread.main(ActivityThread.java:5824) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1010) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 09-13 18:20:09.069 1770-1841/? E/CellLocation: create GsmCellLocation 09-13 18:20:09.244 25904-25931/? E/GED: Failed to get GED Log Buf, err(0)

No adapter attached; skipping layout

在fragment中使用,切换tab返回的时候提示No adapter attached; skipping layout
图片

发现原因是IndexableLayout.class

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mRecy.setAdapter(null);
    }

Header使用GridLayoutManager布局时,显示和滑动会失效

sample中的PickContactActivity如果将布局管理器由LinearLayoutManager改为GridLayoutManager,
通过setSpanSizeLookup改变布局,会导致head不显示内容。
如果将head item的宽度设置为固定值可以显示,但是滑动的时候会有问题。滑动到下面后,在像上面滑动不能正常滑动到head部分,需要点击indexbar才能显示。
会是因为数据刷新的原因么?

index bar 不是 match_parent

IndexableLayout 我设置了高度为 match_parent,但是 index bar 为什么不是 match_parent 呢?也没有设置 index bar 的高度的属性,而且 index bar 我设置了背景色,所以导致了 title 的背景和 index bar 的背景色冲突了,希望尽快修复。

字母索引Bar的问题

如果我不想自动生成字母索引Bar,直接显示标准索引,这个问题该怎么解决呢?

貌似不支持水平的呀

ios特么做了一个水平的一行4个一直往下排的头像,服了他了,搞的我这边也要这么搞才行

刷新问题

我在使用过程中,重新切换刷新到IndexableStickyListView时,右边快速字母会多出很多重复项

程序有两个bug 直接闪退。

1.示例代码中, 选择联系人偶尔会一直显示旋转框,不消失。
2.偶尔会抛出以下异常:

com.yokeyword.indexablelistview.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.yokeyword.indexablelistview.sample, PID: 13239
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(-1, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1562)
at android.widget.AbsListView.onLayout(AbsListView.java:2151)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15685)
at android.view.ViewGroup.layout(ViewGroup.java:5039)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2123)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1880)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1098)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5933)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:775)
at android.view.Choreographer.doCallbacks(Choreographer.java:588)
at android.view.Choreographer.doFrame(Choreographer.java:558)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5290)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

3.优化建议: 选择城市“定”没有显示完全,而且只能用文字,不能用定位的图标。

setOnItemContentClickListener not work

after setOnItemContentClickListener for IndexableRecyclerView, but in onItemClick() method, I can not get any callback.

        List<CityBean> arrays = new ArrayList<>();
        CityBean bean = new CityBean();
        bean.cityname = "定位";
        arrays.add(bean);
        indexLayout.addHeaderAdapter(new SimpleHeaderAdapter<CityBean>(mCityListAdapter, "0", "#", arrays));
        indexLayout.setAdapter(mCityListAdapter);
        indexLayout.setOverlayStyle_Center();
        mPresenter.getData();


        mCityListAdapter.setOnItemContentClickListener(new IndexableAdapter.OnItemContentClickListener<CityBean>() {
            @Override
            public void onItemClick(View v, int originalPosition, int currentPosition, CityBean entity) {
                // 
            }
        });

新版的绑定数据源速度比旧版的慢好多啊

查看适配器中设置数据的方法没有开线程啊
/**
* @param callback Register a callback to be invoked when this datas is processed.
*/
public void setDatas(List datas, IndexCallback callback) {
this.mCallback = callback;
mDatas.clear();
mDatas.addAll(datas);
notifyInited();
}

这样加载数据6000多条, 同样的功能方法用旧版12秒就填充完毕了,新版等待了起码56秒,怎么办啊?

索引有重复的时候,会出现顶部悬浮title默认为重复索引中指向的第一个title。已修改

`
private void initInvalidate(int firstVisibleItem, int i) {

    mCurrentScrollPos = firstVisibleItem;
    if (mScrollState != -1) {
        mSelectionPos = i;

        String indexTitle = getIndexTitle(i, firstVisibleItem);
        mOnIndexSelectedListener.onSelection(mSelectionPos, indexTitle);
    }

    invalidate();
} 

`
/**
* 修改相同索引,StickIndex出现的title显示异常,
* @param position 根据IndexBar索引字体获取的title位置,当title重复时候,会默认获取第一个title,而不是真实的title
* @param firstVisibleItem 顶部显示元素的位置
* @return
*/

`

private String getIndexTitle(int position, int firstVisibleItem) {

    if (mAdapter == null) return "";
    SparseArray<String> map = mAdapter.getTitleMap();
    int len = map.size();
    if (firstVisibleItem >= map.keyAt(len - 1)) {
        return map.get(map.keyAt(len - 1));
    }
    for (int i = 0; i < len - 1; i++) {
        if (firstVisibleItem >= map.keyAt(i) && firstVisibleItem < map.keyAt(i + 1)) {
            return map.get(map.keyAt(i));
        }
    }
    if (position >= size) {
        return mIndex.get(position);
    } else {
        return map.get(map.keyAt(position));
    }
}

`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.