2016-11-09 6 views
-1

私のコードでは、リストビューリストビューの行を削除すると変更されません。adapter.notifyDataSetChange()を使用しますが、これは私のコードではありません。notifyDataSetChangedは私のアクティビティでは動作しません

CustomList adapter; 
Integer[] imageId; 
public String[] _Data2; 
public int positionAll; 
ArrayList<ArrayList<String>> _Data = new ArrayList<ArrayList<String>>(); 
DataBase data = new DataBase(Show_Code.this, "MELK_TBL"); 


try { 
     data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
    } catch (Exception e) { 
     Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    list.setAdapter(adapter); 



list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
             int position, long id) { 

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1), _Data.get(position).get(2), _Data.get(position).get(3), _Data.get(position).get(4), _Data.get(position).get(5), _Data.get(position).get(6), _Data.get(position).get(7)); 
       data.close(); 
       adapter.notifyDataSetChanged(); 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

私はそれのためにすべての時間をしません:(

答えて

0

値を削除した後、すべての値を削除した新しいarraylistを渡して、アダプタクラスに通知する必要があります。あなたのケースでは、以下のコード

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
             int position, long id) { 

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1)); 
       data.close(); 
       **//Edited code...** 
       _Data.get(position).remove(1); 
       adapter.refreshView(_Data); 
       **//Edited code...** 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

を参照してくださいアダプタクラスでrefreshviewメソッドを使用して、データを通知することができ、このところで

public void refreshView(String[] _Data) { 
    this._Data = _Data; 
    notifyDataSetChanged(); 
    } 

、以下のようになります。たとえば、私は1つの値だけを削除して通知します。

希望、これは便利です:)

+0

このコードは機能しません。 – amardco

+0

@amardco:あなたのケースでは、 '_Data2'が文字列配列である場合、アクティビティ.i.e。のString配列から削除された値を削除する必要があります。したがって、削除された値を '_Data2'から削除して、アダプタ文字列配列の値を新しい配列に置き換えて、アダプタに通知する必要があります。それはうまくいく、これは私がここで説明したものです。あなたのケースでは、アクティビティの値を削除しましたが、その値をアダプタに渡していないため、通知が機能しません。 – Jeevanandhan

+0

それは仕事ですfinally.thank – amardco

0

あなたが再びdatabeのみを選択するために、メソッドを使用して、あなたのコードを再編成する必要がありますし、list.setAdapter(adapter);が、その後adapter.notifyDataSetChanged();を使うのですか、私を助けてください

+0

動作しません。私はそれが動作する行を削除するときにしたい。 – amardco

+0

確かに、データベースからオブジェクトをリロードし、 'notifyDataSetChanged()'を使う前に、現在のデータでアダプタをリセットする必要があります。 –

2

あなたは、アダプタで_Data2オブジェクトを渡していますが、データから削除した後、同じオブジェクトを更新する必要がありますonItemLongClick(AdapterView<?> parent, View view,int position, long id)方法でdata.close()前にこれを追加してみてください:。。

_Data = data.GetData(); 
imageId = new Integer[_Data.size()]; 
_Data2.clear(); 
for (int i = 0; i < _Data.size(); i++) { 
    imageId[i] = R.drawable.municipal; 
    _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
} 

_Data2の新しいオブジェクトを作成しないでください。同じオブジェクトをクリアしてもう一度データ全体を追加した後、adapter.notifyDataSetChanged()と呼ぶと自動的に更新されます。

+0

_Data2は機能しません。文字列配列です。 – amardco

+1

_Data2のサイズは以前のものと同じになりますか?権利はありません?それが更新されると、自動的にアダプタのnotifyDataSetChangeで更新されるように、ArrayListを使用する必要があります。 –

+0

私はコードを変更して_Data2をarraylist として定義し、コードなどを変更しますが、再び動作しません。 – amardco

3

配列のサイズは、実行時に変更されていないとして、あなたはonItemLongClick

data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
     list.setAdapter(adapter) 
にこのコードを追加する必要がありますので、uは新しいアダプタを作成する必要があると を一覧表示するには、再度設定
関連する問題