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の最初の要素のみを削除します。誰か助けてください。私は自分でアンドロイドを学ぼうとしています。あなたの助けは私がアンドロイドを学ぶのに非常に有益です。チェックされた項目をリストから削除するためにコードをどのように変更しますか。みんなありがとう

4

3 に答える 3

0

私の記憶が正しければ、.get()を使用すると、getCheckedItemPositions()はすべての値に対してfalseを返します。代わりに使用したいものがチェックされます。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

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

これを試して

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 に答える