2011-07-20 22 views
3

アイテムがリストビュー内でクリックされたときに開くAlertDialogを作成しようとしています。しかし、AlertDialogのコンストラクタはコンテキストを必要としますが、 "this"は無名関数を指しているため動作しません。私は "getApplicationContext()"と "getBaseContext()"を試みましたが、アプリケーションがクラッシュしました。匿名関数内のAndroid AlertDialog

アイデア?

// Open stored preferences page 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 

    // Load stored data key/value pairs 
    Map<String, String> savedData = (Map<String, String>) settings.getAll(); 

    // Populate the list view in the activity with the stored data keys 
    ListView lSavedData = (ListView) findViewById(R.id.lDataList); 

    ArrayAdapter arrAdap = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, savedData.keySet().toArray(new String[0])); 
    lSavedData.setAdapter(arrAdap); 

    lSavedData.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      // Prepare a function selection menu for when the user selects a data item 
      AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); 

      alertBuilder.setTitle("What would you like to do?"); 

      final CharSequence[] dialogOptions = {"Load", "Delete"}; 

      alertBuilder.setItems(dialogOptions, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        //Toast.makeText(getApplicationContext(), dialogOptions[item], Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      AlertDialog functionDialog = alertBuilder.create(); 

      functionDialog.show(); 
      Toast.makeText(getApplicationContext(), "Loaded " + ((TextView) arg1).getText() + " data", Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

答えて

7

YourActivityClassName.thisを使用すると、これはうまくいくはずです。

+1

OMGあなたは」天才!ありがとう - それは働いた! –

+0

@lyad K、よろしくお願いします! – Egor

0

あなたは活動のダイアログを作成した場合、あなたは常にそのactivity.For EXのコンテキストを取得:あなたは唯一A.hisを設定する必要が活動A.withコンテキストパラメータでダイアログを作成します:)