在按钮侦听器内单击时显示DialogFragment对象

时间:2013-05-08 16:40:14

标签: android dialog android-dialog android-dialogfragment dialogfragment

我只是尝试在按钮监听器内点击时显示DialogFragment对象。

以下是应启动Dialog的活动代码:

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

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

private void addListenerToButton1(){
    final Context context = this;


    button1 = (Button) findViewById(R.id.button1);

    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {

            DP ciao = new DP();
            ciao.show(this,"MyDP");
        }
    });
}
}

这是Dialog的代码:

public class DP 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("Prova")
    .setPositiveButton("POS", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {

        }
    })
    .setNegativeButton("NEG", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {

        }
    });
    return builder.create();
}
}

错误是:

  • DialogFragment类型中的方法show(FragmentManager,String)不适用于参数(MainActivity,String)

  • DialogFragment类型中的方法show(FragmentManager,String)不适用于参数(new View.OnClickListener(){},String)

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

通过传递DialogFragment实例与与当前活动相关联的片段进行交互而不是通过传递活动或按钮上下文,从Activity中显示FragmentManager

button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {

        DialogFragment ciao = DP.newInstance();
        ciao.show(MainActivity.this.getFragmentManager(),"MyDP");
    }
});

并且您还需要在DP newInstance()中添加以下DialogFragment方法,该方法返回DialogFragment实例:

public static DP newInstance() {
        DP frag = new DP();
        return frag;
    }

答案 1 :(得分:1)

尝试将正确的上下文传递给DialogFragment

的方法
button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {

        DP ciao = new DP();
        ciao.show(view.getContext(),"MyDP");
    }
});

在原始代码中,调用

'ciao.show(this,"MyDP");'

this指的是它的父类OnClickListener。

分配单击侦听器并覆盖onClick时,您将传递视图和可用于访问信息的参数,包括上下文。

答案 2 :(得分:1)

从android.app.DialogFragment

扩展你的片段(DP)

您可以FragmentManager

Activity内访问getFragmentManager()
button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {

        DP ciao = new DP();
        ciao.show(getFragmentManager(),"MyDP");
    }
});

希望这有效:)