从android中的View显示对话框

时间:2014-04-20 10:20:34

标签: android dialog

我有一个扩展View的自定义类,我在画布上绘制一些几何对象。我还有一个对话框类,我在其中显示一个简单的对话框。 (FinePartita.java)

我的MainActivity.java(我称之为我的视图)

public class MainActivity extends Activity {

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

    PaschiPongView ppv = new PaschiPongView(getApplicationContext());
    setContentView(ppv);
}

}

PaschiPongView.java

public class PaschiPongView extends View {
// a lot of code here
}

FinePartita.java(示例来自Google)

public class FinePartita extends DialogFragment {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.doUreallyWantToExit)
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // FIRE ZE MISSILES!
                }
            })
            .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // User cancelled the dialog
                }
            });
    // Create the AlertDialog object and return it
    return builder.create();
}
}

问题是,我需要在我的PaschiPongView类中显示对话框,但我不能这样做,因为它需要一个FragmentManager,因为我的类扩展了一个View,它没有它。

我不能这样称呼它:

FinePartita test = new FinePartita();
test.show(getFragmentManager(), "dialog"); // doesn't work

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

首先,我会直接回答您的回答。这有点脏,但看起来似乎很安全:

Context的{​​{1}}对象始终是View持有它。 因此,将Activity投射到Activity的结果应该可以解决问题:

getContext()

其次,让我们谈谈你为什么要这样做: 通常,我从不让我的视图处理业务逻辑角色。为什么?因为我不希望将一般用例与特定视图联系起来。这样做,I.E。让您的视图影响应用程序的流程,意味着难以跟踪应用程序状态,并且更改流程更难。还有代码重复。并将您与未来可能不适用的UI设计决策联系起来。

我总是实现一个主控制器,视图报告其状态。我们称之为((Activity) getContext()).getFragmentManager(); 。这是负责决定显示哪些对话框,如何处理结果等的对象。此外,这是存储FlowControl引用的好地方。看看我在哪里?

答案 1 :(得分:0)

DialogFragment是一个显示对话框的片段。如果您想要显示片段,则需要FragmentManager,可以使用Activity' getFragmentManager()方法访问该片段。

DialogFragment的show方式会显示Fragment而非Dialog

相关问题