如何组合搜索列表视图和ListView.OnItemClickListener

时间:2018-04-02 03:07:00

标签: java android

我有一个search listview,我正在尝试将搜索listviewonItemClickListener结合起来使用这样的开关案例。这样用户就可以搜索某个项目并单击它来执行其他活动。

以下为示例截图

enter image description here

这是我的代码

    public class MainActivity extends AppCompatActivity {

    String[] items;
    ArrayAdapter<String> adapter;
    ArrayList<String> listItems;
    ListView listView;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.txtSearch);
        listView = findViewById(R.id.listName);
        initList();
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if(charSequence.toString().equals("")){
                    initList();
                }else{
                    searchItem(charSequence.toString());
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

        listView.setOnItemClickListener(listener);




    }


    ListView.OnItemClickListener listener = new ListView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            switch (listView.getSelectedItemPosition()){
                case 0:
                    changeActivity();
                    break;

                case 1:
                    changeActivity();
                    break;

                case 2:
                    changeActivity();
                    break;
                case 3:
                    changeActivity();
                    break;
            }

        }
    };

    public void changeActivity(){
        Intent intent = new Intent(MainActivity.this, Main2Activity.class);
        intent.putExtra("Key", "Value");
        startActivity(intent);
    }



    public void searchItem(String textSeache){
        for (String item:items){
            if(!item.contains(textSeache)){
                listItems.remove(item);
            }
        }
        adapter.notifyDataSetChanged();
    }

    public void initList(){
        items = new String[]{"California, USA", "Toronto,  CANADA", "Beijing,  CHINA", "Taipei,   TAIWAN"};
        listItems = new ArrayList<>(Arrays.asList(items));
        adapter = new ArrayAdapter<String>(this,R.layout.list_item, R.id.txtItem, listItems);
        listView.setAdapter(adapter);
    }


}

任何人都可以帮助我,谢谢先进......

2 个答案:

答案 0 :(得分:0)

listview.setAdapter(adapter)下面添加此代码段代码并删除listview.setOnItemClickListener(listener);

 listview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {

                String item = ((TextView)view).getText().toString();

                Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

            }
        });

并将数据传递给下一个活动你`changeActivity();应该是这样的:

public void changeActivity(){

Intent intent = new Intent(currentActivity.this,NextActivity.class);
intent.putString("key","value");
startActivity(intent);
}`

答案 1 :(得分:0)

您可以直接使用 onItemClickListener 中的代码,

String selected = listitems.get(position) ;//or (String)parent.getItemAtPosition(position); 
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("Key", selected);
startActivity(intent);

我认为,不需要切换案例,因为您只想转移到下一个活动。

检查list_item.xml布局,因为textview可能无法点击或无法集中。