showDialog obsoleto. Qual é a alternativa?


99

Existe algo mais que deveria ser chamado?

showDialog(TIME_DIALOG_ID);

Está neste tutorial, mas diz obsoleto no Eclipse.

Respostas:


90

De http://developer.android.com/reference/android/app/Activity.html

public final void showDialog (int id) Adicionado na API de nível 1

Este método foi descontinuado no nível de API 13. Use a nova classe DialogFragment com FragmentManager; isso também está disponível em plataformas mais antigas por meio do pacote de compatibilidade do Android.

Versão simples de showDialog (int, Bundle) que não aceita nenhum argumento. Simplesmente chama showDialog (int, Bundle) com argumentos nulos.

Por quê

  • Um fragmento que exibe uma janela de diálogo, flutuando no topo da janela de sua atividade. Este fragmento contém um objeto Dialog, que é exibido conforme apropriado com base no estado do fragmento. O controle da caixa de diálogo (decidir quando mostrar, ocultar, dispensar) deve ser feito por meio da API aqui, não com chamadas diretas na caixa de diálogo.
  • Aqui está uma boa discussão Android DialogFragment vs Dialog
  • Outra boa discussão sobre as vantagens de DialogFragment sobre AlertDialog

Como resolver?

Mais


8

De Activity#showDialog(int):

Este método está obsoleto.
Use a nova DialogFragmentclasse com FragmentManager; isso também está disponível em plataformas mais antigas por meio do pacote de compatibilidade do Android.


132
Então, em vez de chamar uma função simples, você precisa implementar outra classe personalizada? suspiro
Cerin

4
Obsoleto não é a mesma coisa que obsoleto. Se uma função obsoleta ainda funcionar e uma alternativa não estiver disponível nas plataformas mais antigas às quais desejo oferecer suporte, continuo e a utilizo mesmo assim.
Edward Falk

@Edward Acho que há uma alternativa para as plataformas mais antigas, verifique aqui: developer.android.com/reference/android/support/v4/app/…
Rui Posse

6

Para exibir a caixa de diálogo, você pode usar o código a seguir. Isso é para exibir uma caixa AlertDialog simples com várias caixas de seleção:

AlertDialog.Builder alertDialog= new AlertDialog.Builder(MainActivity.this); .
            alertDialog.setTitle("this is a dialog box ");
            alertDialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(),"ok ive wrote this 'ok' here" ,Toast.LENGTH_SHORT).show();

                }
            });
            alertDialog.setNegativeButton("cancel", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                        Toast.makeText(getBaseContext(), "cancel ' comment same as ok'", Toast.LENGTH_SHORT).show();


                }
            });
            alertDialog.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(), items[which] +(isChecked?"clicked'again i've wrrten this click'":"unchecked"),Toast.LENGTH_SHORT).show();

                }
            });
            alertDialog.show();

Título

Considerando que se você estiver usando a função showDialog para exibir uma caixa de diálogo diferente ou qualquer coisa de acordo com os argumentos passados, você pode criar uma função própria e chamá-la na onClickListener()função. Algo como:

 public CharSequence[] items={"google","Apple","Kaye"};
public boolean[] checkedItems=new boolean[items.length];
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt=(Button) findViewById(R.id.bt);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            display(0);             
        }       
    });
}

e adicione o código da caixa de diálogo fornecido acima na definição da função.


3

Este código funcionou para mim. Correção fácil, mas provavelmente não é a forma preferida.

public void onClick (View v) {
    createdDialog(0).show(); // Instead of showDialog(0);
}

protected Dialog createdDialog(int id) {
    // Your code
}

mas como implementar o LIstener nesse método? Digamos que para a caixa de diálogo Data e hora ... @MishaLee
gumuruh

O Android faz isso por você quando você define o atributo onClick em xml.
MishaLee

1
@gumuruh Android faz Listener para você quando você define o atributo onClick em xml como este: android: onClick = "onClick" e o método acima em Java. Se você precisa de um Listener personalizado, você mesmo deve definir um. Mais detalhes estão neste link de
MishaLee

1
package com.keshav.datePicker_With_Hide_Future_Past_Date;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    EditText ed_date;
    int year;
    int month;
    int day;

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

        ed_date=(EditText) findViewById(R.id.et_date);

        ed_date.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Calendar mcurrentDate=Calendar.getInstance();
                year=mcurrentDate.get(Calendar.YEAR);
                month=mcurrentDate.get(Calendar.MONTH);
                day=mcurrentDate.get(Calendar.DAY_OF_MONTH);

                final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                    {
                              ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                            int month_k=selectedmonth+1;

                    }
                },year, month, day);
                mDatePicker.setTitle("Please select date");
                // TODO Hide Future Date Here
                mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

                // TODO Hide Past Date Here
                //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                mDatePicker.show();
            }
        });
    }
}


// Its Working 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.