有什么方法可以在列表视图中更改位置时跟踪项目?

Is there any way of tracking an item in a list view when it changes positions?

以下代码运行良好:

    listView = findViewById(R.id.my_list);

    String[] values = new String[]{
            "TRT 1", "TRT Haber"
    };
    listView.setAdapter(arrayAdapter);

    values = new ArrayList<>(Arrays.asList(values)).toArray(new String[0]);
    arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1,values);
    listView.setAdapter(arrayAdapter);

    listView.setOnItemClickListener((parent, view, position, id) -> {
        if (position == 0) {
            Intent intent = new Intent(view.getContext(), Activity1.class);
            startActivity(intent);
        }
        if (position == 1) {
            Intent intent = new Intent(view.getContext(), Activity2.class);
            startActivity(intent);
        }
    });
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main2, menu);
    MenuItem menuItem = menu.findItem(R.id.search2);
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setQueryHint("Search channels");

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            SearchActivity.this.arrayAdapter.getFilter().filter(s);
            return true;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

当我在列表视图中搜索一个项目时,它成为列表中的第一个项目(我希望发生这种情况),但是如果列表中的第二个项目改变了位置,它会打开错误的 activity。我知道这是因为下面的 if 语句和位置,但我已经坚持了大约一天如何修复它......

    listView.setOnItemClickListener((parent, view, position, id) -> {
        if (position == 0) {
            Intent intent = new Intent(view.getContext(), Activity1.class);
            startActivity(intent);
        }
        if (position == 1) {
            Intent intent = new Intent(view.getContext(), Activity2.class);
            startActivity(intent);
        }
    });
}

非常感谢任何帮助。 *没有显示错误

到目前为止,对于你的情况,这会起作用。

listView.setOnItemClickListener((parent, view, position, id) -> {
            String item = ((TextView)view).getText().toString();
            Intent intent = null;
            switch (item) {
                case "TRT 1":
                    intent = new Intent(view.getContext(), Activity1.class);
                    break;
                case "TRT Haber":
                    intent = new Intent(view.getContext(), Activity2.class);
                    break;
            }
            startActivity(intent);
        });

................................................ .........

还有其他方法可以实现此行为。

  1. 阵列适配器模型class(数据class)

    为您添加的每个模型传递唯一 ID class。这将作为您行的标识符。现在根据这个id,你可以打开想要的activity.

  2. 检查 Recyclerview 实施。