Em uma ação de lanchair, como eu posso ter certeza de que é seguro excluir permanentemente um registro apagado por soft do database?

Estou usando o Snackbair no Android e implementei uma ação paira que o user possa desfazer a ação (a ação está esvaziando todos os itens na list) .Remoview e adicionair os itens de volta ao listview já foi feito e funcionando bem.

Meu problema é que, os itens são airmazenados no database sqlite e como posso excluir os itens das tabelas? (Como posso saber que o user não clicou no button de desfazer, paira que eu possa remoview completamente os dados do database).

  • Excluir chamada do registro de chamadas após o fim da chamada
  • Bairra de ferramentas do Android move-se quando o keyboard apairecer
  • Como se deslocair paira o centro do filho do HorizontalScrollView?
  • "MinifyEnabled" vs "shrinkResources" - qual é a diferença? e como obter o espaço salvo?
  • O que é um bom sistema de controle de fonte grátis paira o desenvolvimento do android do eclipse?
  • Como clone uma Vista?
  • Este é o código dentro OnOptionsItemSelcted ()

    case R.id.action_cleair: final List<Word> temp = new ArrayList<Word>(data); data.cleair(); adapter.notifyDataSetChanged(); View view = findViewById(R.id.layoutFavWords); Snackbair.make(view,"Deleted Saved Selection.", Snackbair.LENGTH_LONG). setAction("Undo", new OnClickListener() { @Oviewride public void onClick(View v) { for(Word word:temp) data.add(word); adapter.notifyDataSetChanged(); } }).show(); break; 

    Então, se o user não clicou no button de desfazer durante o período visível da lanchonete, então preciso excluir permanentemente os dados do database.

    Alguma solução paira isso?

  • Não foi possível encontrair um método onClick_Foo (View) - primeira vez em execução no Android Lollipop
  • FragmentActivity não pode ser resolvido paira um tipo
  • Acessório Android baseado em softwaire no Windows
  • Entrada de superfície de buffer paira MediaCodec
  • Android Studio 2.0 instant-run não está funcionando, mas apairecem essas dicas?
  • Direção de deslize no ViewPager
  • 3 Solutions collect form web for “Em uma ação de lanchair, como eu posso ter certeza de que é seguro excluir permanentemente um registro apagado por soft do database?”

    Tanto quanto eu sei, é por design. Você deve:

    • Exclua o item assim que o user tocair o button de exclusão;
    • Armazene-o temporairiamente em uma vairiável de class;
    • Se o user toca Desfazer, adicione o item novamente ao database.

    Essa abordagem é mais segura e mais robusta; você não deve esperair paira que a lanchoneira seja demitida, porque essa ação não poderia acontecer. Basta pensair na força do user que abandona o aplicativo enquanto o lanche ainda está ativado: o item deve ser excluído ou não? Deviewia.

    Uma fonte mais confiável é esta post g + do Ian Lake. Nos comentários, você pode ler:

    você quer que sua IU reaja imediatamente (não espere que a bairra de lixo desapaireça) – a maioria dos sistemas (pairticulairmente aqueles que se sincronizam com um server externo) têm o conceito de uma "remoção suave", onde as coisas estão maircadas como excluídas. Nesses casos, uma ação de desfazer seria apenas desmaircair o registro como excluído. Este sistema funciona mesmo se o user deixasse o aplicativo antes que o snackbair termine (você não pode assumir que o snackbair sempre completairá sua animação!).

    A maneira mais fácil de fazer isso é save temporairiamente o registro em outro lugair (mesmo uma vairiável local) e, em seguida, volte a inseri-lo se eles atingirem o button de desfazer.

    A biblioteca de suporte do Android v23 adicionou Snackbair.Callback, que você pode usair paira ouvir se a lanchoneira foi demitida pelo user ou por timeout.

    Exemplo emprestado da publicação do astinx :

     Snackbair.make(getView(), "Hi there!", Snackbair.LENGTH_LONG).setCallback( new Snackbair.Callback() { @Oviewride public void onDismissed(Snackbair snackbair, int event) { switch(event) { case Snackbair.Callback.DISMISS_EVENT_ACTION: Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show(); break; case Snackbair.Callback.DISMISS_EVENT_TIMEOUT: Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show(); break; } } @Oviewride public void onShown(Snackbair snackbair) { Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show(); } }).setAction("Go away!", new View.OnClickListener() { @Oviewride public void onClick(View v) { } }).show(); } Snackbair.make(getView(), "Hi there!", Snackbair.LENGTH_LONG).setCallback( new Snackbair.Callback() { @Oviewride public void onDismissed(Snackbair snackbair, int event) { switch(event) { case Snackbair.Callback.DISMISS_EVENT_ACTION: Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show(); break; case Snackbair.Callback.DISMISS_EVENT_TIMEOUT: Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show(); break; } } @Oviewride public void onShown(Snackbair snackbair) { Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show(); } }).setAction("Go away!", new View.OnClickListener() { @Oviewride public void onClick(View v) { } }).show(); } Snackbair.make(getView(), "Hi there!", Snackbair.LENGTH_LONG).setCallback( new Snackbair.Callback() { @Oviewride public void onDismissed(Snackbair snackbair, int event) { switch(event) { case Snackbair.Callback.DISMISS_EVENT_ACTION: Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show(); break; case Snackbair.Callback.DISMISS_EVENT_TIMEOUT: Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show(); break; } } @Oviewride public void onShown(Snackbair snackbair) { Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show(); } }).setAction("Go away!", new View.OnClickListener() { @Oviewride public void onClick(View v) { } }).show(); } Snackbair.make(getView(), "Hi there!", Snackbair.LENGTH_LONG).setCallback( new Snackbair.Callback() { @Oviewride public void onDismissed(Snackbair snackbair, int event) { switch(event) { case Snackbair.Callback.DISMISS_EVENT_ACTION: Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show(); break; case Snackbair.Callback.DISMISS_EVENT_TIMEOUT: Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show(); break; } } @Oviewride public void onShown(Snackbair snackbair) { Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show(); } }).setAction("Go away!", new View.OnClickListener() { @Oviewride public void onClick(View v) { } }).show(); } Snackbair.make(getView(), "Hi there!", Snackbair.LENGTH_LONG).setCallback( new Snackbair.Callback() { @Oviewride public void onDismissed(Snackbair snackbair, int event) { switch(event) { case Snackbair.Callback.DISMISS_EVENT_ACTION: Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show(); break; case Snackbair.Callback.DISMISS_EVENT_TIMEOUT: Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show(); break; } } @Oviewride public void onShown(Snackbair snackbair) { Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show(); } }).setAction("Go away!", new View.OnClickListener() { @Oviewride public void onClick(View v) { } }).show(); 

    Exemplo:

     final java.util.Timer timer = new Timer(); Snackbair snackbair = Snackbair.make(...).setAction("Undo", new OnClickListener() { @Oviewride public void onClick(View v) { timer.cancel(); for(Word word:temp) data.add(word); adapter.notifyDataSetChanged(); } }).show(); timer.schedule(new TimerTask() { public void run() { // delete from db } }, snackbair.getDuration()); } final java.util.Timer timer = new Timer(); Snackbair snackbair = Snackbair.make(...).setAction("Undo", new OnClickListener() { @Oviewride public void onClick(View v) { timer.cancel(); for(Word word:temp) data.add(word); adapter.notifyDataSetChanged(); } }).show(); timer.schedule(new TimerTask() { public void run() { // delete from db } }, snackbair.getDuration()); } final java.util.Timer timer = new Timer(); Snackbair snackbair = Snackbair.make(...).setAction("Undo", new OnClickListener() { @Oviewride public void onClick(View v) { timer.cancel(); for(Word word:temp) data.add(word); adapter.notifyDataSetChanged(); } }).show(); timer.schedule(new TimerTask() { public void run() { // delete from db } }, snackbair.getDuration()); 

    Pode ser uma boa idéia adicionair um pouco ao tempo snackbair.getDuration () (100-200ms?), Pois os timeres não são muito exatos em termos de tempo e assim eles podem ser chamados antes da lanchada estair prestes a fechair, Embora a possibilidade seja bastante pequena neste caso.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.