1

複数選択リストビューを作成したい。リストビューをコンテキスト メニューに関連付けます。メニューには削除項目があります。メニューでアイテムの削除を選択すると、リストビューで選択したアイテムを削除する必要があります。もちろん、リストビューは削除されたアイテムなしで表示されますが、削除アイテムを選択するときに問題があります。これは私のコードです

    String[] mycolors;
ListView myLis;
ArrayAdapter<String> dataAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myLis = (ListView) findViewById(R.id.colorList);
    mycolors = getResources().getStringArray(R.array.colors_array);

    dataAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, mycolors);

    myLis.setChoiceMode(2);
    myLis.setAdapter(dataAdapter);
    myLis.setOnCreateContextMenuListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

private void CreateMenu(Menu menu) {
    MenuItem mnu1 = menu.add(0, 0, 0, "Delete");
    MenuItem mnu2 = menu.add(0, 1, 1, "Item 2");

}

private boolean MenuChoice(MenuItem item) {
    switch (item.getItemId()) {
    case 0:
        deleteSelectedItems();
        return true;
    case 1:
        Toast.makeText(this, "You clicked on Item 2", Toast.LENGTH_LONG)
                .show();
        return true;

    }
    return false;
}

@Override
public void onCreateContextMenu(ContextMenu menu, View view,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, view, menuInfo);
    CreateMenu(menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    return MenuChoice(item);

}

public void deleteSelectedItems(){
    SparseBooleanArray checkedItemPositions = new SparseBooleanArray();
    checkedItemPositions.clear();
    checkedItemPositions = myLis.getCheckedItemPositions();
    int itemCount = checkedItemPositions.size();

    for(int i=itemCount-1; i >= 0; i--){
        if(checkedItemPositions.get(i)){
            Object toRemove = dataAdapter.getItem(i);
            dataAdapter.remove((String)toRemove);
        }
    }
    checkedItemPositions.clear();
    dataAdapter.notifyDataSetChanged();
}

}

4

0 に答える 0