2017-05-05 5 views
0

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)가있는 원래 배열 목록의 여러 항목이 있더라도 다른 배열 목록에는 다른 값이 있습니다. 그 이유는 내가 텍스트의 첫 번째 항목에 대한 배열 목록을 검색하지 않고 원래 위치가 필요합니다. 배열 목록에있는 것을 제어 할 수 없으므로 중복을 고려해야합니다.

답변

-1

공공 무효 onItemClick (어댑터 뷰 AdapterView 부모,보기보기, INT 위치, 긴 ID) {

parent.getItemAtPosition (위치)를 시도하십시오;

* 코드 *

}