在铃声选择对话框后,从主活动中的对话框中更改Textview文本

时间:2013-10-19 07:53:30

标签: java android

已经有一段时间了。令人沮丧!无法想到或找到解决方案。我对Java和Android很熟悉,这可能解释了我的无知。

在下面的代码中,我想将选择的铃声分配给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));** 
              }


          }            

      }  


}

1 个答案:

答案 0 :(得分:0)

首先请不要使用Dialog,因为您可以阅读Android documentation:

  

Dialog类是对话框的基类,但您应该避免直接实例化Dialog。相反,请使用其中一个子类

这是我的建议:
创建用于显示Dialog

的方法
private void displayDialog(String ringtone)  

confClicked(View v)拨打电话。
MainActivity.this.startActivityForResult(intent, 5);关闭对话框后 在OnActivityResult再次致电displayDialog,将选定的铃声传递给它。