2016-10-09 4 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(); 
     } 
    }); 
관련 문제