0

我在 android 中尝试对话框,我遇到了一些问题。
我有两个类,一个是扩展 Activity 的 MainActivity,另一个是扩展 DialogFragment 的 MyDialog。它来自 MainActivity 中的一个新 MyDialog 对象,我在该对象上调用了一个 show 方法来显示对话框。


现在,在选择了任何选项后,我尝试了多种方法将 setText 设置为 TextView,但我无法使用 findViewById 方法,因为那是来自 Activity 并且我没有在 MyDialog 中扩展 Activity。试图创建一个新的 Activity 对象(只是尝试)并从那里使用 findViewById 方法但无济于事。
我还尝试在创建 MyDialog 对象之前在 MainActivity 的 OnCreate 方法中创建一个公共 TextView,并尝试从其他类访问和 setText,但它也不起作用。请帮助,从 DialogFragment 附带的 setPositive、setNegative 和 setNeutral 方法中选择对话框上的选项后,如何设置文本。

这是 MyDialog 类的一些摘录,只是我为对话框选项设置标题等的部分:

@Override public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.dialogMessage).setPositiveButton(R.string.dialogacceptmsg, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            //setting text and color to text in a result textview
            message.setText("You are going to MARS with Sir Richard Branson");

            /*v= new Activity();//creating a new activity to find the textview
            message=(TextView)v.findViewById(R.id.textView1);
            message.setText("You are going to MARS with Sir Richard Branson");
            message.setTextColor(Color.MAGENTA);*/

        }
    }).setNegativeButton(R.string.dialogcancelmsg,new DialogInterface.OnClickListener() {


        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            //setting text and color to text in a result textview
            message.setText("Your ticket will be sold to Justin Bieber");

            /* v= new Activity();//creating a new activity to find the textview
            message = (TextView) v.findViewById(R.id.textView1);
            message.setText("Your ticket will be sold to Justin Bieber");
            message.setTextColor(Color.RED);*/


        }
    }).setNeutralButton("Not sure",new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            // setting text and color to text in a result textview
            message.setText("Keeping it on standby");
            /*v=new Activity();
            message =(TextView) v.findViewById(R.id.textView1);
            message.setText("Keeping it on standby");
            message.setTextColor(Color.BLUE);*/

        }
    }).setTitle(R.string.dialogTitle) ;


    return builder.create();
}
4

2 回答 2

2

你有没有尝试过

TextView yourTextView = (TextView) getActivity().findViewById(R.id.yourTextView);
yourTextView.setText("Some text");

?

于 2013-09-24T21:41:41.103 回答
1

选项1:

使用getActivity()getParentFragment()取决于您正在创建的文件是什么DialogFragment(活动/片段)并设置一个公共方法,例如setTextForMyView(String text)该方法接受一个属性并将其放入文本视图中。

这仅在您使用活动的上下文创建 DialogFragment 时才有效,这意味着您正在做类似new MyDialogFragment(this...)而不是new MyDialogFragment(getApplicationContext()...)

选项 2:

interface在您的内部设置一个DialogFragment,让父活动实现它,在显示对话框之前在构造函数或某个方法中将父活动作为接口的侦听器传递,然后在单击后调用接口的方法。

旁注:我强烈建议您阅读有关活动活动生命周期的文档,以便您了解为什么TextView在其他活动中引用 s 或尝试创建新活动不起作用。

于 2013-09-24T21:45:39.300 回答