2014-11-16 2 views
0

사용자가 listViews 요소 중 하나를 길게 클릭하면 데이터베이스에서 해당 항목을 제거 할 것인지 묻는 새로운 대화 상자가 나타납니다. 그렇다면 해당 대화 상자 조각 onCreateDialog 메서드에서 데이터베이스에서 항목을 제거합니다. 여기에 문제가있다 : main 프래그먼트에있는 listView를 새로 고치는 방법은 무엇입니까? 이 onCreateDialog데이터베이스에서 항목을 삭제 한 후 listView를 업데이트하는 방법은 무엇입니까?

공공 무효 handleNotes (최종의 ListView notesListView) {

if (database.getNoteCount() != 0) { 
    notesListView.setAdapter(new NoteAdapter(getActivity(), database.getAllNotes())); 

    notesListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { 
      TextView textViewId = (TextView) view.findViewById(R.id.textViewId); 

      Toast.makeText(getActivity(), textViewId.getText().toString() + "", Toast.LENGTH_LONG).show(); 

      DeleteNoteFragment newFragment = new DeleteNoteFragment(database, that, notesListView, Integer.parseInt(textViewId.getText().toString())); 
      newFragment.show(getActivity().getSupportFragmentManager(), "deleteConfirmation"); 

      return false; 
     } 
    }); 
} 

}

을 그리고 여기에 있습니다 : : 여기

는 ListView를 처리하기 위해 내 mainFragment 기능입니다

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setMessage(R.string.dialog_delete_note) 
      .setPositiveButton(R.string.dialog_delete_confirm, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        database.removeNote(i); 
        mainFragment.handleNotes(notesListView); 
        Toast.makeText(getActivity(), "Note deleted successfully!", Toast.LENGTH_LONG).show(); 
       } 
      }) 
      .setNegativeButton(R.string.dialog_delete_denny, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      }); 

    // Create the AlertDialog object and return it 
    return builder.create(); 
} 

답변

0

ListAdapter에서 항목을 삭제합니다. 다음 코드를 사용하십시오.

adapter.remove(item); 

그런 다음이 onCreateDialog 방법에 그것을 ListView

adapter.notifyDataSetChanged(); 
+0

내가 대화 조각 생성자에 어댑터를 통과해야 당신의 alongwith 어댑터를 새로 고침하고 처리하기 위해 다음 코드를 사용할 수 있습니까? 이 경우 어댑터가 최종 버전이 될 것이며 어댑터가 새로 고쳐지는 것을 멈추지 않을까요? –

+0

어댑터는 새로운 값을 할당하지 않기 때문에 final로 선언 한 경우에도 'adapter.notifyDataSetChanged();'를 사용하여 새로 고칠 수 있습니다. 내장 된 메소드를 사용하여 내용을 새로 고치기 만하면됩니다 . – Brandon

+0

Dialogs 단편에서 언급 한 방법을 사용해 보았습니다. 작동하지 않았습니다 ... –

관련 문제