1

私はAndroid開発にかなり慣れておらず、まだいくつかのスキルを習得していますが、ListViewとArrayAdapterがアイテムを削除する際に問題が発生しています。私はたくさんの例を試し、できるだけ多くの資料を読んでいますが、何かが足りないのではないかと思います。私の人生の間、私はそれを私のコードで動作させることができません。

どんな助けでもいただければ幸いです。ここにコードを含めました。

public class Favourites extends ListActivity implements OnClickListener {

private static final String TAG = "favourites";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favourites);

    // Test list of strings- eventually to be replaced 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
              "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
              "Linux", "OS/2" };

    // First paramenter - Context
    // Second parameter - Layout for the row
    // Third parameter - ID of the TextView to which the data is written
    // Forth - the Array of data
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);

    setListAdapter(adapter);
    ListView list = getListView();

    Log.d(TAG,"adapter count: " + adapter.getCount());

    // Define listView Long Click listener
    list.setOnItemLongClickListener(new OnItemLongClickListener() {         
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            String item = (String) getListAdapter().getItem(position);                    

            // Remove Item
            AlertDialog.Builder adb = new AlertDialog.Builder(Favourites.this);
            adb.setTitle("Delete?");
            adb.setMessage("Are you sure you want to remove " + item +" (" + position + ")");
            final int positionToRemove = position;
            final String removeItem = item;

            adb.setNegativeButton("Cancel", null);
            adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {        
                // *** Here is where I am experiencing issues ***
                adapter.remove(positionToRemove);
                adapter.notifyDataSetChanged(); 


                Toast.makeText(getApplicationContext(),
                      "Favourite "+ removeItem +" (" + positionToRemove + ") Removed!", Toast.LENGTH_LONG).show();
                }
             });
             adb.show();
             // Return true to consume the click event. In this case the
             // onListItemClick listener is not called anymore.  
             return true;
        }
    });

    // Close button
    View butClose = findViewById(R.id.closeButton);
    butClose.setOnClickListener(this);

    // Add button
    View butAdd = findViewById(R.id.addButton);
    butAdd.setOnClickListener(this);

}
4

4 に答える 4

1

実際には、アダプターから直接削除することはありません。まず、ArrayListからデータを削除する必要があります。だから、変更

adapter.remove(positionToRemove);
adapter.notifyDataSetChanged(); 

values.remove(positionToRemove);
adapter.notifyDataSetChanged(); 
于 2012-11-28T08:18:04.540 に答える
0

私のために働いたコードは:

public void onClick(View v) 
{ 
 if (idx != 0) 
 { 
 String delete = (String) ((OdrLst.getAdapter()).getItem(idx));
 //Log.d("Itemdeleted",delete); 
 adapter.remove(delete); 
 adapter.notifyDataSetChanged(); 
 OdrLst.setAdapter(adapter); 
 //Log.d("adapter count after", adapter.getCount() + ""); 
 //Log.d("lv count after", OdrLst.getCount() + ""); 
 } 
}

idxそれはあなたのインデックス位置でなければなりません。

于 2012-11-28T07:48:49.703 に答える
0

getListAdapter()オブジェクト「adapter」を使用した場所を呼び出してみることができます。お気に入り

getListAdapter().remove(positionToRemove);
getListAdapter().notifyDataSetChanged(); 
于 2012-11-28T07:53:24.460 に答える
0

HTCWildfireとNexus7でも同様の問題が発生しましたListViewが、アイテムを削除しても画面が更新されませんでした。ただし、一部のデバイスではこのような問題は発生しません。たとえば、SamsungSIIでは問題はありません。

修正は奇妙でした(少なくとも私にとっては)、レイアウトbackground="@android:color/black"のから線を取り出してListView、すべてが正常に機能し始めました。

于 2013-03-11T15:05:39.437 に答える