Java 在ListView中使用getFilter时,SharedReference获取的索引错误

Java 在ListView中使用getFilter时,SharedReference获取的索引错误,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我有一个使用ArrayAdapter的ListView,我还实现了getFilter函数来在ListView中搜索。我正在使用SharedReference获取列表视图的索引,以显示有关下一个活动的一些信息。搜索时,如果索引不同,则会导致我的应用程序显示错误信息 case 0: tvT = (TextView) findViewById(R.id.txtTitle); strT = tvT.getText().toS

我有一个使用ArrayAdapter的ListView,我还实现了
getFilter
函数来在
ListView
中搜索。我正在使用
SharedReference
获取
列表视图的索引,以显示有关下一个活动的一些信息。搜索时,如果索引不同,则会导致我的应用程序显示错误信息

case 0:
                    tvT = (TextView) findViewById(R.id.txtTitle);
                    strT = tvT.getText().toString();
                    inPos = strT.indexOf(".");
                    strT = strT.substring(0, inPos);
                    inPos = Integer.valueOf(strT);
                    Toast.makeText(getApplicationContext(), String.valueOf(inPos), 2000).show();
                    //moveToActivity(String.valueOf(inPos-1)); //0
                    break;
                case 1:
                    tvT = (TextView) findViewById(R.id.txtTitle);
                    strT = tvT.getText().toString();
                    inPos = strT.indexOf(".");
                    strT = strT.substring(0, inPos);
                    inPos = Integer.valueOf(strT);
                    Toast.makeText(getApplicationContext(), String.valueOf(inPos), 2000).show();
                    //moveToActivity("1"); //1
                    break;
                case 2:
                    tvT = (TextView) findViewById(R.id.txtTitle);
                    strT = tvT.getText().toString();
                    inPos = strT.indexOf(".");
                    strT = strT.substring(0, inPos);
                    inPos = Integer.valueOf(strT);
                    Toast.makeText(getApplicationContext(), String.valueOf(inPos), 2000).show();
                    //moveToActivity("2"); //2
                    break;
                case 3:
                    tvT = (TextView) findViewById(R.id.txtTitle);
                    strT = tvT.getText().toString();
                    inPos = strT.indexOf(".");
                    strT2 = strT.substring(0, inPos);
                    inPos = Integer.valueOf(strT2);
                    Toast.makeText(getApplicationContext(), strT, 2000).show();
                    //moveToActivity("3"); //3
                    break;
                case 4:
                    tvT = (TextView) findViewById(R.id.txtTitle);
                    strT = tvT.getText().toString();
                    inPos = strT.indexOf(".");
                    strT2 = strT.substring(0, inPos);
                    inPos = Integer.valueOf(strT2);
                    Toast.makeText(getApplicationContext(), String.valueOf(inPos), 2000).show();
                    //moveToActivity("4"); //4
                    break;


public void moveToActivity(String strWhich) {
        editor.putString("NamePosition", strWhich);
        editor.commit();
        Intent myIntent = new Intent(MainActivity.this, NameDisplay.class);
        startActivityForResult(myIntent, 0);
        overridePendingTransition(R.anim.right_slide_in, R.anim.right_slide_out);
    }
我的活动示例:


案例0
代码除了案例1
案例2等等,直到
案例99
它是与案例1相同的INPO。如何使索引的数字无论在什么位置都保持不变?

不是假设每个元素的位置,而是有两种选择:

  • 使用
    adapter.getItem(位置)
    并从那里开始工作
  • 实现
    adapter.getItemId(位置)
    并切换项目的id,而不是位置(适配器必须实现
    getItemId(int位置)

  • 我用以下方法修复了它:

    String check = String.valueOf(dataList.getItemAtPosition(position));
    int pos = check.indexOf(".");
    int pos2 = check.indexOf(" ");
    String strP = check.substring(pos2+1, pos);
    int pos3 = Integer.valueOf(strP) - 1;
    
    switch(position) {
        case 0:
        Log.i("pos", String.valueOf(pos));
        Log.i("pos2", String.valueOf(pos2));
        Log.i("strP", strP);
        Log.i("check", check);
        moveToActivity(String.valueOf(pos3)); //0
        break;
        case 1:
            moveToActivity(String.valueOf(pos3)); //1
            break;
        case 2:
            moveToActivity(String.valueOf(pos3)); //2
            break;
        case 3:
            moveToActivity(String.valueOf(pos3)); //3
            break;
    }
    

    我试图提取
    标题
    ,但无论选择哪一个,它总是返回第一个标题。
    getItem(position)
    如果在搜索时更改了位置,它将如何工作?似乎只有硬编码的数字起作用,但一旦搜索导致索引更改,它就会释放值:/getItem(position)(即使报告的位置为1)没有为您提供正确的项目?那么您的代码必须正在修改
    位置
    我实际上已经去掉了整个
    开关
    案例,并且工作正常。