【问题标题】:Search using ListView in a fragment在片段中使用 ListView 进行搜索
【发布时间】:2017-02-16 06:12:38
【问题描述】:

我需要帮助。

我的搜索栏功能有问题。 在放置搜索代码之前。我的 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;
    }
}

然后我插入这段代码:

/************************************************************************************/
        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

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

到目前为止,代码正在运行。它可以搜索。

问题:(例如 #1 我搜索“完整”单词 Bar 并选择它而不是它会转到 BarFragment 它转到 ArtGalleryFragment)

(例如 #2 当我搜索“ba”时,它会显示面包店、银行、酒吧的列表。当我选择银行而不是当它转到 BankFragment 时,它会转到 AtmFragment。

你能帮帮我吗?

【问题讨论】:

    标签: java android string listview switch-statement


    【解决方案1】:

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

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

    示例 2:“银行”是搜索结果列表中的第二个元素,AtmFragment 是您的 switch 中的第二个案例(索引 1)。

    【讨论】:

    • 那么,你有什么推荐的?
    • 您可以使用监听listView 的选择更改而不是单击鼠标。它会告诉你选择了哪个元素。
    • 可能还会在onItemClick 中获得listViewselectedItemselectedIndex,但我不确定您是否会遇到时间问题。
    【解决方案2】:

    我认为你需要实现 Filterable 接口。

    【讨论】:

    • 我会注意的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多