2013-01-21 2 views
1

데이터베이스의 레코드를 표시하는 목록보기가 있습니다. listview의 각 행에는 체크 박스가 있습니다. 어떻게 ...ListView에서 선택된 여러 항목 삭제

  1. 선택한 항목의 값을 표시하는 토스트 메시지를 만드시겠습니까?
  2. 목록보기에서 사용자가 선택한 레코드를 식별합니까?
  3. 선택한 각 항목을 반복하고 데이터베이스에서 목록보기에서 선택된 행만 삭제 하시겠습니까?

여기이 도움이 자습서를 다음 봤는데 : //http://www.vogella.com/articles/AndroidSQLite/article.html를

public class PhoneNumberDataBaseListView extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     NumbersDataSource datasource = new NumbersDataSource(this); 
     datasource.open(); 
     String number = "123"; 
     datasource.createNumber(number); 
     List<Number> values = datasource.getAllNumbers(); 
     ArrayAdapter<Number> adapter = new ArrayAdapter<Number>(this, android.R.layout.simple_list_item_multiple_choice, values); 
     setListAdapter(adapter); 
    } 

    public void deleteNumber() { 
     NumbersDataSource datasource = new NumbersDataSource(this); 
     datasource.open(); 
     ListView LV = (ListView) findViewById(android.R.id.list); 
     List<Number> values = datasource.getAllNumbers(); 
     ArrayAdapter<Number> adapter = new ArrayAdapter<Number>(this, android.R.layout.simple_list_item_multiple_choice, values); 
     setListAdapter(adapter); 

     SparseBooleanArray checkedItems = LV.getCheckedItemPositions(); 
     for (int i = 0; i < checkedItems.size(); i++) { 
      if(checkedItems.valueAt(i)) { 
       Number item = adapter.getItem(i); 
       Toast t = Toast.makeText(this, item.getNumber().toString(), Toast.LENGTH_LONG); 
       t.show(); 
      } 
     } 
    } 

답변

0

방법 getCheckedItemPositions()를 SparseBooleanArray를 반환 나타냅니다 어떤 항목이 검사되는지 (특정 위치의 항목이 검사되면 해당 배열에서 호출 된 valueAt (position) 메서드는 true를 반환합니다). 코스 SimpleCursorAdapter 및 DBAdapter해야의

SparseBooleanArray checkedItems = listView.getCheckedItemPositions(); 
for (int i = 0; i < checkedItems.size(); i++) { 
    if(checkedItems.valueAt(i)) { 
     db.deleteTitle(adapter.getItemId(i)); 
    } 
} 

: 당신은 다음과 같습니다 튜토리얼 클래스 DBAdapter는 deleteTitle (긴 ROWID) 당신은 당신의 코드는 다음과 같이 더 많거나 적은 찾아야한다 want.Therefore 무엇 acheive하는 데 사용해야하는 방법을 제공합니다 객체 속성에 저장되어 두 메소드 (onCreate 및 deleteRecord)에서 액세스 할 수 있습니다. 그런데, deleteRecord 메서드에 전달 된 View 매개 변수는 필요하지 않습니다.

+0

안녕하십니까. 귀하의 의견에 감사드립니다. 튜토리얼은 원래 다음과 같은 나를 위해 일하지 않기 때문에 나는 여전히 내 목록보기에서 선택한 항목을 삭제할 수 없거나 값을 가져올 수없는 다른 자습서를 사용하기 시작했습니다. 선택한 항목 중 ... 내 코드와 자습서 URL을 업데이트했습니다. – thedeepfield