java - ListView 索引和 SearchView

标签 java android listview arraylist searchview

我正在构建一个非常基本的应用程序:我有一个列表,一旦您单击该列表中的某个项目,您就会收到一个警报对话框,其中包含所单击项目的更多信息。

我实现了一个过滤器搜索功能,它运行得很好,但有一个大问题:假设您在搜索栏上输入文本“1”,然后您会在屏幕上看到以 1 开头的所有项目,因此:1、11、12、13、14、15 等。

一旦您单击新列表的第二个项目,您将不会获得 R.layout.11 ,但会获得 R.layout.2 ,基本上是因为代码会将 11 识别为 id == 1 的列表的第二个项目,而不是 id == 12 的第 11 个项目。

显然,这不仅仅涉及第二项,还涉及过滤列表中的所有项目。有人可以帮我解决这个问题吗?您知道如何解决它吗? 我对 Android 应用程序开发非常陌生,我对 Java 知之甚少,我刚刚学习,谢谢您的耐心。

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

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_max);

    final String[] nameproducts = new String[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

    // ArrayList
    final ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < nameproducts.length; ++i) {
        list.add(nameproducts[i]);

    }

    final ListView mylist = (ListView) findViewById(R.id.listView1);

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

    sv=(SearchView) findViewById(R.id.searchView1);
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;

        }

        @Override
        public boolean onQueryTextChange(String text) {
            adapter.getFilter().filter(text);
            return false;

        }

    });

    mylist.setAdapter(adapter);

    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> testo, View v, int pos, long id) {

            if (id == 0) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
                builder.setCancelable(true);
                LayoutInflater inflater = getLayoutInflater();
                View view = inflater.inflate(R.layout.1, null);
                builder.setView(view);
                builder.show();
            }

            if (id == 1) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
                builder.setCancelable(true);
                LayoutInflater inflater = getLayoutInflater();
                View view = inflater.inflate(R.layout.2, null);
                builder.setView(view);
                builder.show();
            }

            if (id == 2) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
                builder.setCancelable(true);
                LayoutInflater inflater = getLayoutInflater();
                View view = inflater.inflate(R.layout.3, null);
                builder.setView(view);
                builder.show();
            }

        }

    });

}

最佳答案

检查所点击项目的而不是 ID 怎么样?这有效:

@Override
public void onItemClick(AdapterView<?> test, View v, int pos, long id) {
    String num = test.getItemAtPosition((int)id).toString();
    if (num.equalsIgnoreCase("11")) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setCancelable(true);
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.eleven, null);
        builder.setView(view);
        builder.show();
    }
    else if (num.equalsIgnoreCase("12")) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setCancelable(true);
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.twelve, null);
        builder.setView(view);
        builder.show();
    }

关于java - ListView 索引和 SearchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41661028/

相关文章:

android - 从对话框更新 Activity 的 ListView

java - 字符串不变性 - (连接并分配新值)

java - 如何使用 mongo java 驱动程序将实际查询记录到 MongoDB

java - Android:如何确定 HTTP PUT 请求是否已完成处理

android - 微调器在项目选择上添加字符串数组如何在android中获取项目相关值

Android:如何创建这样的自定义 ListView?

c# - 在我的 C# XAML Windows 8.1 应用程序中,如何迭代我的 ListView?

java - 调用 GSSContext.initSecContext 间歇性失败 : Receive timed out

java - Android Room数据库创建了3个文件,包括-shm和-wal文件

java - 在此 Gridview 中显示错误 java.lang.NullPointerException