@all23081992

Почему не открывается диалог при вызове из списка?

Есть список кнопок. На щелчок кнопки повешен обработчик, который открывает диалог (alert.show()).
При первом создании активити события работают без проблем. Но если выйти из активити и заново открыть ее из другой активити, вываливается ошибка при нажатии на кнопку: "Unable to add window is not valid; is your activity running". В чем может быть причина? Так же есть просто кнопка на форме. она отрабатывает как надо

event_list
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button4"
        android:onClick="sendClick"/>

    <ListView
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:id="@+id/event_listview"
    android:dividerHeight="10dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:alpha="1"
    android:divider="#00ffffff">

</ListView>
</LinearLayout>


ListEventActivity
public class ListEventActivity extends Activity {

    static EventsAdapter nonsendedAdapter;


    private static final String TAG = "myLogs";

    public void butClick(View v) {
      //Button b = (Button)findViewById(R.id.button4);
       // b.performClick();
        sendClick(v);
    }
    public void sendClick(View v) {
       try{
        Log.d(TAG, "MainActivity.sendClick");
        Context context = getParent();


        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Важное сообщение!")
                .setMessage("Покормите кота!")

                .setCancelable(false)
                .setNegativeButton("ОК, иду на кухню",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();

            alert.show();
        }
        catch (Exception e) {
            Log.d(TAG, "MainActivity.sendClick error " + e.getMessage());
        }
    }


    protected void onResume() {
        super.onResume();
    }
  public void initInterface() {
            ListView nonsendedList = getNonsendedListView();
            if (nonsendedAdapter == null) {
                nonsendedAdapter = new EventsAdapter(this, EventsAdapter.MODE_UNSENDED, nonsendedList, this);
            } else {
                nonsendedAdapter.loadData();
            }

            nonsendedList.setAdapter(nonsendedAdapter);


    }

    public void notifyAdapters() {
        nonsendedAdapter.notifyDataSetChanged();

    }

    public ListView getNonsendedListView() {
        return (ListView)nonsendedView;
    }


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

        setContentView(R.layout.event_list);
Intent intent = getIntent();
        nonsendedView = (ListView)findViewById(R.id.event_listview);
        initInterface();
    }
    ListView  nonsendedView;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_maps, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.onBackPressed();
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    protected void onDestroy() {
        Log.d(TAG, "destroy ");
        nonsendedView.setAdapter(null);
        super.onDestroy();
    }
}
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
@onepavel
Консультация и разработка мобильных приложений
Походу проблема в том, что у вас nonsendedAdapter является static. Внутрь адаптера EventsAdapter вы передаете ссылку на первую активити, которая не может умереть при закрытии. При открытии второй активити, в новый ListView сетится адаптер с ссылкой на первое активити. Такая ерунда создает много проблем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы