0

私は Android の初心者で、問題があります。次のコードをご覧ください。

new AlertDialog.Builder(this)
  .setTitle("Save File")
  .setMessage("Do you want to save to a file ?")
  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
          // Ask user for a file name to save the text in the text editor.
          PreSaveFile();

          // Clear text editor. 
          // This is executed immediately and it does not wait until PreSaveFile() ends.
          CleanEditor(et);
        }
    })
.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        CleanEditor(et);
    }
})

問題は、2 番目の呼び出し が終了するCleanEditor(et)まで待機しないPreSaveFile()ため、テキスト エディターにあるものを保存するファイル名を選択すると、テキスト エディターがCleanEditor(et)消去されて何も保存されないことです。

私が十分に明確だったことを願っています。

4

2 に答える 2

3

PreSaveFile がファイル名を入力するダイアログを表示する場合、ダイアログが閉じられるのを待たずに実行を継続するため、PreSaveFile が終了し、CleanEditor が実行されます。

PreSaveFile() を作成したダイアログにリスナーを追加し、そのリスナー内で CleanEditor(et) を呼び出す必要があります。

于 2012-08-13T18:51:34.870 に答える
0

まず、PreSaveFile() 関数を投稿して、もう少し読みやすくします。

private void PreSaveFile() { 
    EditText et = (EditText)findViewById(R.id.editText1); 
    if (et.length() == 0) { 
        Toast.makeText(getBaseContext(), "Editor is empty!", Toast.LENGTH_SHORT).show(); 
    } 
    if (textFile.length() == 0) { 
        Intent i = new Intent(MainActivity.this, FileChooser.class); 
        Bundle myData = new Bundle(); 
        myData.putString("textFile", ""); 
        i.putExtras(myData); 
        startActivityForResult(i, 1); 
    } else { 
        SaveFile(); 
    } 
} 

ここで次の 2 点を指摘したい。

1)コードが想定している実行パスに従っていることを確認しましたか?特に、コードがelse()ではなくif()に入るように、testFile.length()が実際に0であることを確認しましたか?

2)さらに重要なことは、この質問 への回答に示されているように、startActivityForResult が非同期で実行するアクティビティを開始することです。結果が取得されたに実行するコードは、コールバック内に配置する必要があります。この質問への回答を参照してください。onActivityResult()

お役に立てれば!

于 2012-08-14T13:58:10.177 に答える