【问题标题】:How can I change SearchView to make it works如何更改 SearchView 以使其正常工作
【发布时间】:2021-04-05 07:29:43
【问题描述】:

我有一个带搜索视图的工作列表视图,但是当我在搜索视图中搜索某些内容并单击创建的项目时,它总是打开第一个活动,我该如何更改它以使其正常工作?


    SearchView searchView;
    ListView listView;

    String[] nameList = {
            "A", "B1", "B2", "B3"
    };

    ArrayAdapter<String> arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        searchView = findViewById(R.id.search_bar);
        listView = findViewById(R.id.listview);

        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,nameList);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                if (position == 0) {
                    Intent intent = new Intent(view.getContext(), Activity_A.class);
                    startActivity(intent);
                }

                if (position == 1) {
                    Intent intent = new Intent(view.getContext(), Activity_B1.class);
                    startActivity(intent);
                }

                if (position == 2) {
                    Intent intent = new Intent(view.getContext(), Activity_B2.class);
                    startActivity(intent);
                }

                if (position == 3) {
                    Intent intent = new Intent(view.getContext(), Activity_B3.class);
                    startActivity(intent);
                }

【问题讨论】:

  • 在 onItemClick 中,第一个结果将打开“Activity_A”,无论输入/找到什么,因此可能会根据输入字符串或更好的一些 id 打开 Activity。
  • 我该怎么做?我已经开始学习了。

标签: android android-studio android-activity


【解决方案1】:

使用 setOnItemSelectedListener 代替 setOnItemClickListener

SearchView searchView;
ListView listView;

String[] nameList = {
        "A", "B1", "B2", "B3"
};

ArrayAdapter<String> arrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    searchView = findViewById(R.id.search_bar);
    listView = findViewById(R.id.listview);

    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,nameList);
    listView.setAdapter(arrayAdapter);
    listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            if (position == 0) {
                Intent intent = new Intent(view.getContext(), Activity_A.class);
                startActivity(intent);
            }

            if (position == 1) {
                Intent intent = new Intent(view.getContext(), Activity_B1.class);
                startActivity(intent);
            }

            if (position == 2) {
                Intent intent = new Intent(view.getContext(), Activity_B2.class);
                startActivity(intent);
            }

            if (position == 3) {
                Intent intent = new Intent(view.getContext(), Activity_B3.class);
                startActivity(intent);
            }
        }
       @Override
       public void onNothingSelected(AdapterView<?> parent) {           
          }
        });
  }

【讨论】:

  • @DodusiakPL 如果有错误,请修复。我在 searchview 中使用这种语法。或者告诉我错误。
【解决方案2】:

当您搜索并且我假设只有一个项目与搜索匹配时,该项目的位置现在为 0,因此根据您的逻辑,Activity_A 将以 onClick 启动。所以代码可以正常工作。所以你必须使用不同的逻辑来打开正确的活动,比如列表项视图中的文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2010-09-27
    • 2017-05-29
    • 2019-11-01
    相关资源
    最近更新 更多