2013-10-19 22 views
0

已在此处停留了一段时间。令人沮丧!无法想到或找到解决方案。我对Java和Android很感兴趣,这可能解释我的无知。在铃声选择对话框后,从主要活动中更改对话框中的Textview文本

在下面的代码我想的是被选择了对TextView的ringtoneDisplay铃音分配 - 我理解的是,TextView的是对话框内的主要问题 - 不能从主活动改变。你如何从主活动中更改对话框中的Textview?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // When a configuration button is clicked that shows a dialog 
    public void confClicked(View v) { 

     // Define and create a dialog to display 
     final Dialog dialog = new Dialog(this); 
      dialog.setContentView(R.layout.dialog); 
      dialog.show(); 

      // Dialog has a button to change ringtone 
      Button changeRing = (Button) dialog.findViewById(R.id.changeRing); 

      final TextView ringtoneDisplay = (TextView) dialog.findViewById(R.id.ringtone_textview); 

     changeRing.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Bring up ringtone change dialog 
      Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
      intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); 
      intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
      intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null); 
      MainActivity.this.startActivityForResult(intent, 5); 
      } 
     }); 

    } 

    // Fired after ringtone was selected 

    protected void onActivityResult (final int requestCode, final int resultCode, final Intent intent) 
    { 

     if (resultCode == Activity.RESULT_OK && requestCode == 5) 
      { 
       Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

       if (uri != null) 
       { 
        **// --> This below won't work.. 
        // --> declaring ringtoneDisplay outside confClicked creates a runtime error. 
        // --> How do you go about updating ringtoneDisplay to display the ringtone that was chosen 

        ringtoneDisplay.settext(RingtoneManager.getRingtone(this, uri).getTitle(this));** 
       } 


      }    

     } 


} 

回答

0

首先请勿使用Dialog,你可以在Android documentation:

读出对话框类是对话的基类,但是你应该避免直接实例对话框。相反,使用子类

这是我的建议之一:
创建用于显示对话框

private void displayDialog(String ringtone) 

confClicked(View v)调用它的方法。
MainActivity.this.startActivityForResult(intent, 5);后关闭对话框
OnActivityResult再次呼叫displayDialog传递给它选择的铃声。

+0

感谢您的意见。 如果我正确理解你,那么你所说的是我必须关闭对话框并重新加载它。在对话框中还有很多其他的事情,我没有包含在代码中。再次关闭和打开对话框会导致问题...理想的情况是我可以更新文本视图来指示选择的铃声。 – gpwr

+0

据我所知是不可能的。可以改为使用另一个活动而不是对话框 – ramaral

+0

对话框的目的是询问或报告一些内容。如果你想处理一些事情,最好使用一个活动 – ramaral