Android java.lang.IndexOutOfBoundsException:设置范围(4…18)结束于长度6之外

Android java.lang.IndexOutOfBoundsException:设置范围(4…18)结束于长度6之外,android,Android,我只是使用带有令牌自动完成视图的EditText,我希望EditText输入类型为“phone” 所以我用 if (savedInstanceState == null) { completionView.setPrefix("To: "); completionView.addObject(people[0]); completionView.addObject(people[1]); } onClick(); adapter.notifyDat

我只是使用带有令牌自动完成视图的
EditText
,我希望
EditText
输入类型为“phone” 所以我用

 if (savedInstanceState == null) {
     completionView.setPrefix("To: ");
     completionView.addObject(people[0]);
     completionView.addObject(people[1]);     
 }
 onClick();
 adapter.notifyDataSetChanged();    
 completionView.setInputType(InputType.TYPE_CLASS_PHONE);
它不起作用了。。需要帮助…提前谢谢..

您一定在使用,但我没有遇到任何故障

people = new Person[]{
            new Person("Margaret Smith", "8888888888888"),
            new Person("Max Jordan", "77777777777"),
            new Person("Meg Peterson", "666666666666"),
            new Person("Amanda Johnson", "555555555555"),
            new Person("Terry Anderson", "4444444444444")
    };

    adapter = new FilteredArrayAdapter<Person>(this, R.layout.person_layout, people) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater l = (LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = (View)l.inflate(R.layout.person_layout, parent, false);
            }
            Person p = getItem(position);
            ((TextView)convertView.findViewById(R.id.name)).setText(p.getName());
            ((TextView)convertView.findViewById(R.id.email)).setText(p.getEmail());
            return convertView;
        }

        @Override
        protected boolean keepObject(Person obj, String mask) {
            mask = mask.toLowerCase();
            return obj.getName().toLowerCase().startsWith(mask) || obj.getEmail().toLowerCase().startsWith(mask);
        }
    };
    completionView = (ContactsCompletionView)findViewById(R.id.searchView);
    completionView.setAdapter(adapter);
    completionView.setTokenListener(this);
    if (savedInstanceState == null) {
        completionView.setPrefix("To: ");
        completionView.addObject(people[0]);
        completionView.addObject(people[1]);
    }
    completionView.setInputType(InputType.TYPE_CLASS_PHONE);
people=newperson[]{
新人(“玛格丽特·史密斯”、“88888888”),
新人(“Max Jordan”、“777”),
新人(“梅格·彼得森”、“6666”),
新人(“阿曼达·约翰逊”、“5555”),
新人(“特里·安德森”,“444”)
};
adapter=新过滤器DarrayAdapter(this,R.layout.person\u layout,people){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutFlater l=(LayoutFlater)getContext().getSystemService(Activity.LAYOUT\u INFLATER\u SERVICE);
convertView=(视图)l.充气(R.布局.人员布局,父级,false);
}
人员p=getItem(职位);
((TextView)convertView.findViewById(R.id.name)).setText(p.getName());
((TextView)convertView.findviewbyd(R.id.email)).setText(p.getEmail());
返回视图;
}
@凌驾
受保护的布尔keepObject(Person对象、字符串掩码){
mask=mask.toLowerCase();
返回obj.getName().toLowerCase().startsWith(mask)| | obj.getEmail().toLowerCase().startsWith(mask);
}
};
completionView=(ContactsCompletionView)findViewById(R.id.searchView);
setAdapter(适配器);
setTokenListener(此);
如果(savedInstanceState==null){
setPrefix(“To:”);
completionView.addObject(人员[0]);
completionView.addObject(people[1]);
}
completionView.setInputType(InputType.TYPE\u CLASS\u PHONE);

你应该把你的问题说得更清楚,并公布细节。

也许你应该公布更多的代码。我不知道你真正的问题是什么,什么是completionView什么是completionView,什么包含人?但我可以告诉你,你有“java.lang.IndexOutOfBoundsException:SetPan(4…18)结束于长度6之外”,因为你的文本长度是6(你有6个字符),你试图将跨度从第4个字符设置为第18个字符,所以你有“IndexOutOfBoundsException”@Jerome..completionView=(ContactsCompletionView)findViewById(R.id.searchView)@Rami..people包含{“name”,“9983423555”}我只希望我的令牌编辑文本完成textview@Jerome...exactly...their将是一个删除最后一个按钮..我的实际问题是当我删除最后一个令牌时,通过删除按钮或键盘上的退格。。。app get crash..@Jerome..非常感谢兄弟..但是当我将类型设置为type_CLASS_PHONE时,删除最后一个标记显示错误..显示设置范围的错误..需要帮助吗