Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
Java 在片段中使用ListView进行搜索_Java_Android_String_Listview_Switch Statement - Fatal编程技术网

Java 在片段中使用ListView进行搜索

Java 在片段中使用ListView进行搜索,java,android,string,listview,switch-statement,Java,Android,String,Listview,Switch Statement,我需要帮助 我的搜索栏功能有问题。 在输入搜索代码之前。我的ListandSearch.java运行良好。这就是我想做的 ListandSearch.java: public class ListandSearch extends Fragment{ // Search EditText EditText inputSearch; ArrayAdapter<String> listViewAdapter; ListView listview;

我需要帮助

我的搜索栏功能有问题。 在输入搜索代码之前。我的ListandSearch.java运行良好。这就是我想做的

ListandSearch.java:

public class ListandSearch extends Fragment{


    // Search EditText
    EditText inputSearch;
    ArrayAdapter<String> listViewAdapter;
    ListView listview;


    String[] esttype = {
            "Art Gallery", //1
            "ATM", //2
            "Bakery", //3
            "Bank", //4
            "Bar", //5


};


    public ListandSearch(){

    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_list_fragment, container, false);

        listview = (ListView) view.findViewById(R.id.thislist);
        inputSearch = (EditText) view.findViewById(R.id.inputSearch);

        listViewAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1 , esttype);
        listview.setAdapter(listViewAdapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                android.app.FragmentManager fragmentManager = getFragmentManager();
                switch (position) {
                    case 0:
                        fragmentManager.beginTransaction().replace(R.id.content_frame, new ArtGalleryFragment()).commit();
                        break;
                    case 1:
                        fragmentManager.beginTransaction().replace(R.id.content_frame, new AtmFragment()).commit();
                        break;
                    case 2:
                        fragmentManager.beginTransaction().replace(R.id.content_frame, new BakeryFragment()).commit();
                        break;
                    case 3:
                        fragmentManager.beginTransaction().replace(R.id.content_frame, new BankFragment()).commit();
                        break;
                    case 4:
                        fragmentManager.beginTransaction().replace(R.id.content_frame, new BarFragment()).commit();
                        break;

                        default:
                        break;

                }
            }});
        return view;
    }
}
到目前为止,代码正在运行。它可以搜索

问题:(例如#1我搜索“complete”单词栏并选择它,它将转到BarFragment,它将转到ArtGalleryFragment)

(例如#2当我搜索“”时,它显示的是面包店、银行、酒吧的列表。当我选择银行时,当它转到银行碎片时,它转到ATM碎片


您能帮助我吗?

您不能使用
int position
,因为它是搜索结果列表中的位置,而不是完整列表中的位置

例1:搜索结果中只有一个元素,因此它的索引为0。选择它会导致运行
case 0
,即
ArtGalleryFragment


例2:“银行”是搜索结果列表中的第二个元素,
AtmFragment
是第二种情况(索引1)在您的
开关中

我认为您需要实现可过滤界面。

那么,您可以推荐什么?您可以使用listView的选择更改,而不是鼠标单击。它会告诉您选择了哪一个元素。还可以获取
listView
selectedItem
selectedIndex
在中单击,但我不确定您是否会遇到计时问题。我会注意到这一点
/************************************************************************************/
        inputSearch.addTextChangedListener(new TextWatcher() {

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

            }
        });
        /*****************************************************************/