Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android listview上使用筛选时出错?_Android_Android Listview_Filtering - Fatal编程技术网

在android listview上使用筛选时出错?

在android listview上使用筛选时出错?,android,android-listview,filtering,Android,Android Listview,Filtering,我正在尝试在android应用程序中将过滤添加到我的listview中。它无法正常工作,因为在搜索框中写入3-4个字母后出现以下异常 07-02 12:14:48.348: E/AndroidRuntime(22028): FATAL EXCEPTION: main 07-02 12:14:48.348: E/AndroidRuntime(22028): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 07-02 1

我正在尝试在android应用程序中将过滤添加到我的listview中。它无法正常工作,因为在搜索框中写入3-4个字母后出现以下异常

07-02 12:14:48.348: E/AndroidRuntime(22028): FATAL EXCEPTION: main
07-02 12:14:48.348: E/AndroidRuntime(22028): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
07-02 12:14:48.348: E/AndroidRuntime(22028):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at java.util.ArrayList.get(ArrayList.java:304)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at com.sphinx.indianrailways.adapters.CityAdapter.getView(CityAdapter.java:57)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.AbsListView.obtainView(AbsListView.java:2143)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.ListView.makeAndAddView(ListView.java:1831)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.ListView.fillDown(ListView.java:674)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.ListView.fillSpecific(ListView.java:1332)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.ListView.layoutChildren(ListView.java:1630)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.AbsListView.onLayout(AbsListView.java:1994)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.View.layout(View.java:14008)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.View.layout(View.java:14008)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.View.layout(View.java:14008)
07-02 12:14:48.348: E/AndroidRuntime(22028):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
我的筛选代码如下所示:

filterTextWatcher = new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int start, int before,
                    int count) {
                // When user changed the Text by typing in search box
                adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        };

        citySearchBox.addTextChangedListener(filterTextWatcher);
我的StationAdapter.java代码是:

    public class CityAdapter extends ArrayAdapter<City> {
    ArrayList<City> cityLists = new ArrayList<City>();
    private Context context;
    public String noInternet = "No network connectivity.Try again later.";
    City city= null;

    public CityAdapter(Context context, int textViewResourceId,
            ArrayList<City> cityLists) {
        super(context, textViewResourceId, cityLists);
        this.context = context;
        this.cityLists = cityLists;
    }

    static class ViewHolder {
        protected TextView cityCode;
        protected TextView cityName;
    }

    @Override
    public int getCount() {
        return cityLists.size();
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder = null;
        if (convertView == null) {
            LayoutInflater inflator = ((Activity) context).getLayoutInflater();
            convertView = inflator.inflate(R.layout.single_city_item, null);
            holder = new ViewHolder();

            holder.cityCode = (TextView) convertView
                    .findViewById(R.id.cityCode);
            holder.cityName = (TextView) convertView
                    .findViewById(R.id.cityName);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        city= getItem(position);

        holder.cityCode.setText(city.getCityCode());
        holder.cityName.setText(city.getCityName());
        return convertView;
    }
}
公共类CityAdapter扩展了ArrayAdapter{
ArrayList cityList=新的ArrayList();
私人语境;
public String noInternet=“无网络连接。请稍后再试。”;
城市=空;
公共城市适配器(上下文,int textViewResourceId,
ArrayList(城市列表){
超级(上下文、textViewResourceId、城市列表);
this.context=上下文;
this.citylist=城市列表;
}
静态类视窗夹{
受保护的文本视图城市代码;
受保护的文本视图城市名称;
}
@凌驾
public int getCount(){
返回citylist.size();
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
ViewHolder=null;
if(convertView==null){
LayoutFlater充气器=((活动)上下文)。GetLayoutFlater();
convertView=充气机。充气(R.layout.single_city_item,空);
holder=新的ViewHolder();
holder.cityCode=(TextView)convertView
.findviewbyd(R.id.cityCode);
holder.cityName=(TextView)convertView
.findviewbyd(R.id.cityName);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
城市=获取项目(位置);
holder.cityCode.setText(city.getCityCode());
holder.cityName.setText(city.getCityName());
返回视图;
}
}

我知道arraylist当时可能有1个元素,它试图通过列表[1]访问它,这将引发nullpointerexception。但是我需要在代码中做什么更改才能解决这个问题。

在我们讨论之后,我认为问题出在下面:

 @Override
    public int getCount() {
        return cityLists.size();
    }
这使适配器认为它的大小比正常值大(因为它的大小是固定的,过滤后不会更改),并且在调用
getView()
city=getItem(position);
)时无法获取作为其边界之一的项

您应该实现如问题中所述的
Filterable
接口(
getFilter()
)。这将在每次调用
getFilter()
时更新
citylist
数组,它的大小将正常返回,还将更新适配器(
notifyDataSetChanged()

编辑


另一种方法是删除
getCount()
(让super方法生效)。这将在每次应用筛选器时更新大小,而不是返回固定的
citylist.size()
,这将使适配器认为其大小大于其拥有的数据。基本上,您要么像以前一样实现
getCount()
,另外添加
getFilter()
以更改
citylist
每次过滤时的大小,要么让系统同时处理这两个问题(不要实现
getFilter()
getCount()

经过我们的讨论,我认为问题在于:

 @Override
    public int getCount() {
        return cityLists.size();
    }
这使适配器认为它的大小比正常值大(因为它的大小是固定的,过滤后不会更改),并且在调用
getView()
city=getItem(position);
)时无法获取作为其边界之一的项

您应该实现如问题中所述的
Filterable
接口(
getFilter()
)。这将在每次调用
getFilter()
时更新
citylist
数组,它的大小将正常返回,还将更新适配器(
notifyDataSetChanged()

编辑


另一种方法是删除
getCount()
(让super方法生效)。这将在每次应用筛选器时更新大小,而不是返回固定的
citylist.size()
,这将使适配器认为其大小大于其拥有的数据。基本上,您可以像以前一样实现
getCount()
,另外还可以添加
getFilter()
来更改
citylist
的大小,或者让系统处理这两个问题(不要实现
getFilter()
getCount()

请显示
CityAdapter
implementation@Mohamed_AbdAllah我添加了CityAdapter代码。请帮助我没有看到您在适配器中的任何位置使用city变量,为什么要使用行
city=getItem(position)@Mohamed_AbdAllah我正在adpater的getView()方法中使用它。请再次查看代码。我可以看到。我的问题是为什么要使用它(您没有将它分配给适配器中
city=getItem(position);
)行之后的任何其他内容)?!!这就是您的问题所在,因此如果您不使用它,请删除它,并显示
CityAdapter
implementation@Mohamed_AbdAllah我添加了CityAdapter代码。请帮助我没有看到您在适配器中的任何位置使用city变量,为什么要使用行
city=getItem(position)@Mohamed_AbdAllah我正在adpater的getView()方法中使用它。请再次查看代码。我可以看到。我的问题是为什么要使用它(您没有将它分配给适配器中
city=getItem(position);
)行之后的任何其他内容)?!!这就是你的问题所在,所以如果你不使用它,请删除它谢谢@Mohamed的解释谢谢@Mohamed的解释