2013-03-24 62 views
0

我正在尝试使用Scala开发Android应用程序。当从非活动调用时,findViewById返回null

当我的应用程序启动就立即显示一个对话框,如下所示:

override def onCreate(savedInstanceState: Bundle) { 
    super.onCreate(savedInstanceState) 
    competitionSetupDialogFragment.show(getFragmentManager(), HomeScreenActivity.CompetitionDialog) 
    } 

    override def onStart() { 
    super.onStart 
    resourceHelper.setActivity(this) 
    } 

我的片段如下:

class CompetitionSetupDialogFragment extends DialogFragment { 
    @Inject 
    var competitionSetupDialogHandler: CompetitionSetupDialogHandler = null 
    @Inject 
    var resourceHelper: ResourceHelper = null 

    override def onCreateDialog(savedInstanceState: Bundle): Dialog = { 
    val builder = new AlertDialog.Builder(getActivity()) 
    builder.setMessage(getString(R.string.competitionSetupDialogMessage)) 
     .setCancelable(false) 
     .setView(getActivity().getLayoutInflater.inflate(R.layout.competition_setup, null)) 
     .setNegativeButton(R.string.cancel, new OnClickListener { 
     def onClick(dialog: DialogInterface, which: Int) { 
      dismiss() 
     } 
     }) 
     .setPositiveButton(R.string.create, new OnClickListener { 
     def onClick(dialog: DialogInterface, which: Int) { 
      val competitionNameInput = resourceHelper.findViewById(R.id.competitionNameInput).asInstanceOf[EditText] 
      val numberOfPlayersInput = resourceHelper.findViewById(R.id.numberOfPlayersInput).asInstanceOf[EditText] 
      val numberOfSubsInput = resourceHelper.findViewById(R.id.numberOfSubsInput).asInstanceOf[EditText] 
      val lengthOfHalfInput = resourceHelper.findViewById(R.id.lengthOfHalfInput).asInstanceOf[EditText] 
      competitionSetupDialogHandler.retrieveValuesAndSave(competitionNameInput, numberOfPlayersInput, numberOfSubsInput, lengthOfHalfInput) 
     } 
     }) 

    builder.create() 
    } 
} 

最后,ResourceHelper包含以下内容:

public View findViewById(int viewID) { 
     return activity.findViewById(viewID); 
    } 

我的问题是,我的resourceHelper.findViewById总是返回null,即使这些都是有效的观点。

我的想法是,在onClick()被调用时,视图已被销毁,或类似的东西。 我该如何解决这个问题?

这里有一点要补充的是,我的对话框显示细腻,只有当onClick函数执行,我已经解决了这个问题

回答

1

如下:

创建一个对话框视图变量:

var dialogView = getActivity().getLayoutInflater.inflate(R.layout.competition_setup, null) 

使用这个变量调用findViewById:

val competitionNameInput = dialogView .findViewById(R.id.competitionNameInput).asInstanceOf[EditText]