我正在试验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();
}
答案 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
,让父活动实现它,在构造函数或某些方法中将父活动作为接口的侦听器传递,然后再显示对话框,然后调用点击后你的界面的方法。
旁注:我强烈建议您阅读Activities和the Activity Lifecycle的文档,以便了解为何在其他活动中引用TextView
或尝试创建新活动的原因工作