2013-11-20 77 views
1

所以我試圖做一個設置屏幕,它似乎工作,直到我意識到偏好不會對點擊作出反應。我試着用onPreferenceStartFragment,但有一個奇怪的錯誤,我用線PreferenceActivity:OnPreferenceStartFragment「令牌上的語法錯誤」;「,{預計在此令牌之後」

boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) 

這裏遇到的The onPreferenceStartFragment:

public interface OnPreferenceStartFragment { 
     boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref); 
     //Syntax error on token ";", { expected after this token 

     if(pref == password) { 
      LayoutInflater inflater = LayoutInflater.from(context); 
      final View text = inflater.inflate(R.layout.changepassword, null); 
      final EditText currentPassword = (EditText)text.findViewById(R.id.currentPassword); 
      final EditText newPassword = (EditText)text.findViewById(R.id.newPassword); 

      final AlertDialog.Builder alert = new AlertDialog.Builder(context); 
      alert.setTitle("Change Your Password"); 
      alert.setView(text); 
      alert.setPositiveButton("Change", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
         String stringData = currentPassword.getText().toString().trim(); 
         String stringNew = newPassword.getText().toString().trim(); 
         dataReturned = myFolder.getString("passwordKey", ""); 
         if(dataReturned.equals(stringData)) {      
          String newData = newPassword.getText().toString().trim(); 
          SharedPreferences.Editor editor = myFolder.edit(); 
          editor.putString("passwordKey", newData); 
          editor.commit(); 
          dataReturned = myFolder.getString("passwordKey", "couldn't load data"); 
          Toast.makeText(context, "Password changed", Toast.LENGTH_SHORT).show(); 
          currentPassword.setText(""); 
          newPassword.setText(""); 
         } 

         else { 
          Toast.makeText(context, "Incorrect Password", Toast.LENGTH_LONG).show(); 
          currentPassword.setText(""); 
          newPassword.setText(""); 
         } 
        } 
       }); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        dialog.cancel(); 
       } 
       }); 
      alert.show(); 
      ; 
     } 
     if(pref == notification) { 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.device_access_secure) 
      .setOngoing(true) 
      .setContentTitle("Obstruct") 
      .setContentText("Start Stealth Mode"); 

      Intent resultIntent = new Intent(); 

      TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
      stackBuilder.addNextIntent(resultIntent); 

      PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
      mBuilder.setContentIntent(resultPendingIntent); 

      NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      mNotificationManager.notify(0, mBuilder.build()); 
     } 
     return true; 
    } 

一切似乎是正確的,但它的flummoxing我,事實並非如此。有任何想法嗎?

回答

0

我對Java接口並不太熟悉,但我懷疑編譯器期望您定義一個名爲onPreferenceStartFragment的方法。當然,您的代碼似乎表示同樣多,因爲行後的下一個語句

boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref); 

是一個if語句。

您可能希望通過定義onPreferenceStartFragment方法以及它在接口中的正文來檢查括號以及要實現的內容。事實上,在快速搜索之後,我甚至不確定是否允許您定義接口中的方法。

編輯:爲了正確,我將添加在接口中定義的默認方法體是Java 8的可用功能。但是Android不支持Java 8,因此不支持在接口中定義的方法體。見What is the "default" implementation of method defined in an Interface?

0
boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref); 

是一種方法和代碼,你必須在它下面是什麼是在調用此方法執行。行尾應該沒有分號,它應該是啓動方法的開始括號。

它應該是:

boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref){ 

    if(pref == password) { 
    ... <the rest of your code here> 
    ... 
    return true; 
} 
相關問題