I이 배열searchview 자바로 여과 후리스트 뷰의 원래 위치를 얻기
arrayList.add("Adam");
arrayList.add("Bob");
arrayList.add("Bob");
arrayList.add("Charlie");
그때 적절히 사용자
String text = textField.getText().toString().toLowerCase(Locale.getDefault());
adapter.getFilter().filter(text);
입력 내용에 기초하여 상기 어댑터를 여과 searchview가 채워리스트 뷰를
사용자가 "B"를 입력하면 "Bob"과 "Bob"이 목록보기에 표시되는 유일한 항목입니다. 맨 위를 클릭하면 항목 위치는 0입니다.이 항목의 원래 위치 (이 경우 1)를 가져와야합니다. 행의 컨텍스트를 취하여 arrayList에서 항목의 첫 번째 항목을 검색 할 수 있다는 것을 알고 있습니다. 그런 다음 필터링되지 않은 arraylist에서 그 위치를 얻을 수 있습니다. (예)
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int i = 0;
String text = ((TextView) view).getText().toString();
i = arrayList.indexOf(text);
if(textLength == 0)
Toast.makeText(getApplicationContext(), text + " and position is " + position, Toast.LENGTH_SHORT).show();
else{
Toast.makeText(getApplicationContext(), text + " and position is " + i, Toast.LENGTH_SHORT).show();
}
}
});
필터링이 적용되지 않은 경우 클릭하는 행에 관계없이 작동합니다. 필터링 후 동일한 텍스트가있는 항목이 두 개 이상있을 수 있기 때문에 선택한 행이 처음 나타나는 배열 목록을 검색 할 수 없습니다. 또한, 두 번째 "Bob"(필터링 후)을 클릭하면 첫 번째 "Bob"(1 임)의 위치가 반환됩니다. 나는 문제를 이해하고, 나는 해결책을 찾아 내지 못한다. 이 문제를 효과적으로 해결할 수있는 방법이 있습니까?
이것은 개념 증명의 증거가 될 수 있습니다. 내 실제 프로젝트에는 여러 배열 목록이 있습니다. 따라서 동일한 텍스트 (Bob 및 Bob)가있는 원래 배열 목록의 여러 항목이 있더라도 다른 배열 목록에는 다른 값이 있습니다. 그 이유는 내가 텍스트의 첫 번째 항목에 대한 배열 목록을 검색하지 않고 원래 위치가 필요합니다. 배열 목록에있는 것을 제어 할 수 없으므로 중복을 고려해야합니다.