0

我是 android 新手,我在我的代码中使用 ListView。我的代码如下:

import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.content.DialogInterface;

@SuppressLint("NewApi")
public class MainActivity extends Activity 
{
int counter;
ListView listView;
ArrayAdapter <String> adapter;
Button btnAddAgain, btnDeleteSelected;
ArrayList <String>listItems=new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    counter=0;
    listView=(ListView) findViewById(R.id.myList);
    adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,listItems);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(adapter);

    btnAddAgain=(Button) findViewById(R.id.addAgain);
    btnAddAgain.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View arg0) 
        {
            listItems.add("Clicked " +counter++);
            adapter.notifyDataSetChanged();
        }
    });

    btnDeleteSelected=(Button) findViewById(R.id.btnDelete);
    btnDeleteSelected.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View arg0) 
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setMessage("Delete?");
            builder.setTitle("Confirm Action");
            builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int id) 
                {
                    SparseBooleanArray checked = listView.getCheckedItemPositions();
                    for (int i = 0; i < listItems.size(); i++)
                    {
                        if (checked.get(i)==true)
                        {
                            listItems.remove(i);
                            adapter.notifyDataSetChanged();
                        }
                    }
                    //checked.clear();
                }
             });
            builder.setNegativeButton("Cancel", null);
            builder.create();
            builder.show();
        }
    });




}

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

}

但删除按钮仅删除 ListView 的第一个元素。有人请帮助我。我正在尝试自己学习android。你的帮助对我学习安卓很有帮助。我在代码中做了哪些更改以从列表中删除选中的项目。多谢你们

4

3 回答 3

0

listView.getCheckedItemPositions();只返回选中的位置

试试这个代码

SparseBooleanArray checked = listView.getCheckedItemPositions();
int min = 0;
for(int i=0; i<checked.size();i++){
    int pos = checked.keyAt(i);
    listItems.remove(pos - min);
    min++;
}
adapter.notifyDataSetChanged();

希望这对您有所帮助;

于 2013-03-19T03:19:40.050 回答
0

如果我没记错的话,当您使用 .get() 时,getCheckedItemPositions() 会为所有值返回 false。你想改用的是checked.valueAt(i)==true 在SparseBooleanArray 上看这里

在您的情况下填充 SparseBooleanArray 的方式似乎没有密钥,这意味着您的所有 .get(key) 都将返回 false ,因为它找不到该项目。相反,您应该只使用 valueAt(int index) 因为您可以使用索引来查找哪些项目为真。

因此,您的代码应如下所示:

for (int i = 0; i < listItems.size(); i++)
                    {
                        if (checked.valueAt(i)==true)
                        {
                            listItems.remove(i);
                            adapter.notifyDataSetChanged();
                        }
                    }
于 2013-03-19T03:05:53.093 回答
0

尝试这个

public void onClick(DialogInterface dialog, int id) 
            {
                SparseBooleanArray checked = listView.getCheckedItemPositions();
                int size = listItems.size() - 1;
                for (int i = size; i > -1; i--)
                {
                    if (checked.get(i))
                    {
                        listItems.remove(i);

                    }
                }
                adapter.notifyDataSetChanged();
                //checked.clear();
            }
         });
于 2013-03-19T03:30:11.307 回答