1

データベースのレコードを表示するリストビューがあります。リストビューの各行にはチェックボックスがあります。どうすれば...

  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();
             }  
        }
    }
4

1 に答える 1

0

メソッド getCheckedItemPositions() は、どのアイテムがチェックされているかを示す SparseBooleanArray を返します (特定の位置のアイテムがチェックされている場合、その配列で呼び出されたメソッド valueAt(position) は true を返します)。フォローしているチュートリアルのクラス DBAdapter は、必要なものを達成するために使用する必要がある deleteTitle(long rowId) メソッドを提供します。したがって、コードは多かれ少なかれ次のようになります。

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

もちろん、SimpleCursorAdapter と DBAdapter は、両方のメソッド (onCreate と deleteRecord) からアクセスできるように、オブジェクト属性に格納する必要があります。ちなみに、deleteRecord メソッドに渡す View パラメータは不要です。

于 2013-01-21T22:18:37.557 に答える