Android: onPreparePanel (...) не вызывается - PullRequest
1 голос
/ 01 декабря 2011

В моем приложении я использую пользовательский диалог, чтобы получить некоторую информацию перед созданием нового объекта.Содержимое некоторых текстовых полей сохраняется при каждом вызове диалогового окна (поведение по умолчанию), но я хочу каждый раз очищать поле «имя», чтобы пользователь вводил новое имя.Для этого я использовал onPreparePanel(...), чтобы очистить поле перед отображением диалогового окна.

Согласно документации, onPreparePanel(...) называется "вызывается непосредственно перед отображением окна панели, каждый раз, когдапоказано «.

Этот метод никогда не вызывается в моем пользовательском диалоговом классе!

Вот пользовательский диалог (MyDialog.java):

package com.test.HelloAndroid;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MyDialog extends Dialog {

    public MyDialog(Context context) {
        super(context);
    }

    @Override
    public boolean onPreparePanel(int featureId, View view, Menu menu) {
        return true;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.my_dialog);

        TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setOnClickListener(new Button.OnClickListener() {

                public void onClick(View v) {
                    dismiss();
                }

        });
    }
}

Этот код использует showDialog(int) механизм отображения диалога.Вот основной:

package com.test.HelloAndroid;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class HelloAndroid extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                showDialog(0);
            }

        });
    }

    protected Dialog onCreateDialog(int id) {
        return new MyDialog(this);
    }    
}

XML для макета my_dialog:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/hello"></TextView>
</LinearLayout>

XML для основного макета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:layout_width="wrap_content" android:text="Button" android:layout_height="wrap_content" android:id="@+id/button1"></Button>
</LinearLayout>

1 Ответ

0 голосов
/ 01 декабря 2011

Ваш код здесь:

@Override
public boolean onPreparePanel(int featureId, View view, Menu menu) {
    return true;
}

Разве у вас не должно быть дополнительного кода, чтобы сделать его за вас? Вы просто возвращаете истину там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...