如何在实现DialogFragment的类中设置textview中的文本

时间:2013-09-24 21:34:53

标签: java android

我正在试验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类的一些摘录,只是我为对话框选项设置标题等的部分:

@覆盖     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();
}

2 个答案:

答案 0 :(得分:2)

你试过吗

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

答案 1 :(得分:1)

选项1:

使用getActivity()getParentFragment(),具体取决于您创建DialogFragment文件的内容(活动/片段),并设置setTextForMyView(String text)等公共方法,一个属性并将其放入文本视图中。

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

之类的操作

选项2:

interface内设置DialogFragment,让父活动实现它,在构造函数或某些方法中将父活动作为接口的侦听器传递,然后再显示对话框,然后调用点击后你的界面的方法。

旁注:我强烈建议您阅读Activitiesthe Activity Lifecycle的文档,以便了解为何在其他活动中引用TextView或尝试创建新活动的原因工作