Разработка Android - AlertDialog показывает внутри вкладки деятельности - PullRequest
4 голосов
/ 17 апреля 2011

У меня возникают проблемы с отображением диалогового окна с предупреждением внутри Действия с вкладками.Мое приложение будет принудительно закрываться каждый раз, когда я пытаюсь отобразить диалоговое окно с предупреждением.Мой код выглядит следующим образом:

public class TablesActivity extends ListActivity {

final int INFO_ID = 0;
final int STATUS_ID = 1;
AlertDialog alert = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure you want to mark table as dirty?")
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Toast.makeText(getApplicationContext(), "Table Marked Dirty",
                                    Toast.LENGTH_LONG).show();
                        }
                    })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    alert = builder.create();

    setListAdapter(new ArrayAdapter<String>(this, R.layout.history,
            TABLES));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // When clicked, show a toast with the TextView text
            Toast.makeText(getApplicationContext(),
                    ((TextView) view).getText(), Toast.LENGTH_LONG).show();
        }
    });

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {


            alert.show();
            // TODO Auto-generated method stub
            return true;
        }

    });
}

static final String[] TABLES = new String[] { "Table 1", "Table 2",
        "Table 3", "Table 4", "Table 5", "Table 6", "Table 7", "Table 8",
        "Table 9", "Table 10", "Table 11", "Table 12", "Table 13"

};

}

Проблема возникает, когда я пытаюсь выполнить dialog.show (), и больше нигде.Я получаю ошибку logcat:

04-16 17: 25: 15.519: ОШИБКА / AndroidRuntime (311): android.view.WindowManager $ BadTokenException: Невозможно добавить окно - маркер android.app.LocalActivityManager$ LocalActivityRecord @ 44f08320 недействителен;ваша деятельность выполняется?

Ошибка возникает из строки dialog.show ().Я не уверен, что именно здесь делать.Действие выполняется после того, как оно было запущено ранее группой действий, порожденной TabHost.

Есть какие-либо идеи о том, что я могу сделать, чтобы решить эту проблему?Я в своем уме.

1 Ответ

4 голосов
/ 10 января 2013

пожалуйста, используйте

`AlertDialog.Builder builder = new AlertDialog.Builder(this.getParent());`

insted из

`AlertDialog.Builder builder = new AlertDialog.Builder(this);`
...