[Android]如何从偏好设置屏幕启动意图获得结果?

nav*_*een 7 android android-preferences

从首选项屏幕启动的意图中我需要帮助来确定结果

   // Intent preference 
   DevicePref = 
   getPreferenceManager().createPreferenceScreen(this); 

   // Show a Screen with list of Devices Discovered 
   Intent i = new Intent(this,getDevice.class); 
   DevicePref.setIntent(i); 
   DevicePref.setTitle("Select Device"); 
   DevicePref.setSummary(mSelectedDevice); 
   deviceOptionsCat.addPreference(DevicePref); 
Run Code Online (Sandbox Code Playgroud)

我希望用户选择设备...在偏好屏幕中我显示"选择设备"..当用户点击它时,另一个屏幕按意图启动,其中列出了所有设备.用户选择设备.

现在我怎么知道用户选择了哪个设备?我想在摘要中更新它.

PLS.让我知道谢谢

nav*_*een 9

我得到了答案,希望它会帮助像我这样的人......

在创建首选项时不要像我在上面的代码中那样提及意图.提到OnPreferenceClickListener的意图,然后执行StartActivityForResult()

    // Intent preference 
   DevicePref = getPreferenceManager().createPreferenceScreen(this); 
   // Show a Screen with list of Devices Discovered 

   DevicePref.setOnPreferenceClickListener(onPreferenceClick);

   DevicePref.setTitle("Select Device"); 
   DevicePref.setSummary(mSelectedDevice); 
   deviceOptionsCat.addPreference(DevicePref); 
Run Code Online (Sandbox Code Playgroud)

然后创建OnPreferenceClickListner,这里做StartActivityFromResult()

OnPreferenceClickListener onPreferenceClick = new Preference.OnPreferenceClickListener() {
       public boolean onPreferenceClick(Preference preference) {

           if (preference ==DevicePref )
           {
               Intent i = new Intent(DevuiceOptions.this,getDevice.class);  
               DevicePref.setIntent(i); 
               startActivityForResult(i,CHOOSE_DEVICE);

           }
           return true;
       }
   };
Run Code Online (Sandbox Code Playgroud)

最后获取结果句柄onActivityResult并更新Summary字段.

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data)
   {

       switch (requestCode) {

           case Constants.CHOOSE_DEVICE:
           {
               if (data!=null )
               {
                   Bundle b = data.getExtras();
                   mSelectedDevice =    (String) b.get("Name");
                   UpdatePreferences();
               }

           }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢