2016-10-09 10 views
-2

私はすべて削除ボタンを持っており、リストビュー内のすべてのアイテムを削除するたびに、リストビューは移動しませんが、同じ状態を維持します。私は自分のコードにログを出力しています。それはdeleteメソッドが呼び出される前にリストビューがリロードされたようです。私のコードは次のとおりです。すべてのアイテムを削除した後にリストビューをリロードする方法は?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    DBHelper db = new DBHelper(this); 

    final ListView listView = (ListView) findViewById(R.id.listView); 
    TextView empty = (TextView) findViewById(R.id.empty); 

    ArrayList<Inventory> listArray = new ArrayList<>(); 
    listArray.clear(); 
    listArray = db.read(); 
    if (listArray.size() == 0) { 
     empty.setText("No Items"); 
    } else { 
     empty.setText(""); 
    } 
    ListViewAdapter customAdapter = new ListViewAdapter(listArray); 
    customAdapter.notifyDataSetChanged(); 
    listView.setAdapter(customAdapter); 

    Button add_button = (Button) findViewById(R.id.button); 
    add_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addNewItem(view); 
     } 
    }); 

    Button button_deleteAll = (Button) findViewById(R.id.button_deleteAll); 
    button_deleteAll.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      deteleAll(); 
      DBHelper db = new DBHelper(MainActivity.this); 

      final ListView listView = (ListView) findViewById(R.id.listView); 
      TextView empty = (TextView) findViewById(R.id.empty); 

      ArrayList<Inventory> listArray = new ArrayList<>(); 
      listArray.clear(); 
      listArray = db.read(); 
      Log.v("arraysize:", String.valueOf(listArray.size())); 
      if (listArray.size() == 0) { 
       empty.setText("No Items"); 
      } else { 
       empty.setText(""); 
      } 
      ListViewAdapter customAdapter = new ListViewAdapter(listArray); 
      customAdapter.notifyDataSetChanged(); 
      listView.setAdapter(customAdapter); 
     } 
    }); 
} 

メソッドdeleteAll()は、SQLiteのすべてのデータを削除します。 このメソッドの前にリロードするのではなく、このメソッドの後にlistviewをリロードする方法を知りたいと思います。

答えて

0

あなたのアダプターのすべて削除メソッドを追加してください。ボタンがクリックされるたびにアダプタのdeleteAllメソッドを呼び出します。 DELETEALL方法は以下のようになります:

public void setListArray(ArrayList arrayList) 
{ 
//assuming your adapter list is named "listArray" 
this.listArray = arrayList; 
notifyDataSetChanged(); 
} 

と、ボタンのクリックで簡単にこのコードを書く:

button_deleteAll.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    //assuming your list of itames here is named "mListArray" 
    mListArray.clear(); 
    adapter.setListArray(mListArray); 
    } 
    } 
0

ボタンOnClickメソッドでcustomAdapterを再度初期化する必要はありません。また、もう一度setAdapterを呼び出す必要はありません。

これらの行をonClickメソッドで削除してください。

問題が解決します。

+0

これは以前のものですが、動作しませんでした。 –

0

ただリスナーの内側に、あなたのアダプタにnotifyDataSetChanged();を追加します。たとえば:

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) { 
      myArrayList.remove(position); 
      myArrayAdapter.notifyDataSetChanged(); 
     } 
    }); 
関連する問題