【问题标题】:listview search列表视图搜索
【发布时间】:2019-02-11 13:07:06
【问题描述】:

我正在尝试在片段上实现 ListView,但在运行代码时收到错误“android.widget.Filter android.widget.ArrayAdapter.getFilter()' on an null object reference”我尝试搜索 ListView。

xml代码

    <?xml version="1.0" encoding="utf-8"?>

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:fillViewport="true">

   <LinearLayout

        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
        <!-- Main ListView Always give id value as list(@android:id/list) -->

        <!-- Search Bar -->
        <EditText
            android:id="@+id/inputSearch"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:ems="10"
            android:maxLines="1"
            android:drawableLeft="@android:drawable/ic_menu_search"
            android:hint="Search" >
            <requestFocus />
        </EditText>

        <ListView
            android:id="@+id/assembly_business_list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</ScrollView>

Java 代码:

public class AssemblyBusinessFragment extends Fragment {

String[] menuItems = {"Acts","Bills","Communication from Chair","Order Papers"};
private EditText inputSearch;
private ListView assembly_business_list;
private ArrayAdapter adapter;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.assembly_business, container, false);

    //returning our layout file
    //change R.layout.yourlayoutfilename for each of your fragments

    ListView assembly_business_list = (ListView) view.findViewById(R.id.assembly_business_list);

    ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(
            getActivity(),
            android.R.layout.simple_expandable_list_item_1, menuItems
    );

    assembly_business_list.setAdapter(listViewAdapter);

    inputSearch = (EditText) view.findViewById(R.id.inputSearch);

    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            AssemblyBusinessFragment.this.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
        }
    });

    return view;

}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //you can set the title for your toolbar here for different fragments different titles
    getActivity().setTitle("Assembly Business");
}

}

我需要有人来解决这个错误。

【问题讨论】:

    标签: android listview search


    【解决方案1】:

    您需要在“listViewAdapter”上设置过滤器。您的变量“适配器”根本没有初始化。把代码改成这样:

     @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            listViewAdapter.getFilter().filter(cs);
        }
    

    【讨论】:

    • 如何将静态项目字符串更改为 MySQL 数据库中的动态项目字符串....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多