2012-03-05 3 views
6

Tôi muốn biết khi nào một tệp tùy chọn được chia sẻ được tạo lần đầu tiên?Khi nào là tệp tùy chọn được chia sẻ đầu tiên được tạo?

Tôi có đoạn mã sau:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory android:title="User settings"> 
     <EditTextPreference android:title="User Name" 
     android:key="userName" android:summary="Please Enter User Name"></EditTextPreference> 
     <EditTextPreference android:title="Password" 
     android:key="password" android:summary="Password Here" 
     android:inputType="textPassword"></EditTextPreference> 
</PreferenceCategory> 

</PreferenceScreen> 


    public class PrefsActivity extends PreferenceActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.prefs); 
    } 
} 

Ngoài ra, làm thế nào tôi có thể sử dụng getSharedpreference(), với tên tập tin? Tôi không biết liệu tôi có phải tạo tệp này trước tiên và đặt nó vào thư mục dữ liệu của ứng dụng không?

Ý tôi là Khi nào là tệp tùy chọn được chia sẻ đầu tiên được tạo: khi ứng dụng được cài đặt hoặc sau một thời gian? Nếu sau này, khi nào?

Trả lời

12

Phương thức getSharedPreferences(name, mode) tự động tạo tệp có tên được chỉ định, do đó bạn không cần phải tạo tệp đó. Trên thực tế, vị trí chính xác và tên của tệp tùy chọn này không được ghi lại, vì vậy tôi khuyên bạn không nên dựa vào một số quy ước khi cố gắng access this file directly, vì vị trí và tên có thể được thay đổi trong tương lai - SharedPreferences phải là cách duy nhất để truy cập tệp này.

Tệp tùy chọn có tên nhất định được tạo khi số getSharedPreferences(name, mode) hoặc addPreferencesFromResource(preferencesResId) được gọi lần đầu tiên.

2

Tôi không chắc chắn 100% những gì bạn đang nói đến ở đây.

Bạn không cần tạo bất kỳ tệp nào khi xử lý PreferenceScreens hoặc SharedPreferences. Điều đó được xử lý bởi SharedPreferences đằng sau hậu trường. Tôi tin rằng điều đó xảy ra khi bạn đặt giá trị trong màn hình Ưu tiên đầu tiên nhưng tôi thực sự không chắc chắn.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
String username = preferences.getString("username", "defaultvalue"); 
String password = preferences.getString("password", "defaultvalue"); 

Mã đó sẽ nhận SharedPreferences cho PreferenceScreen của bạn khi chúng đã được đặt. Nếu chúng chưa được đặt, bạn sử dụng các giá trị mặc định.

+1

cảm ơn vì điều đó .. i có nghĩa là Khi nào một tệp tùy chọn được chia sẻ được tạo lần đầu tiên: khi ứng dụng được cài đặt, hoặc một thời gian sau? Nếu sau này, khi nào? – Smitha

+0

Tôi tin rằng nó được tạo ra lần đầu tiên mà PreferenceScreen xuất hiện, hoặc khi một mục trong PreferenceScreen được thiết lập đầu tiên bởi người dùng. Như tôi đã nói, tôi không hoàn toàn chắc chắn về điều đó. – Knossos

+0

vâng .. Tôi nghĩ bạn đúng! – Smitha

-4

Bạn phải đặt mục đích hoạt động tùy chọn trong onCreateOptionMenu.

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 

    return super.onCreateOptionsMenu(menu); 
} 


public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) 
    { 
     case R.id.setting: 
      startActivity(new Intent(this,Settingpage.class)); 
      Toast.makeText(this, "setting clicked", Toast.LENGTH_LONG).show(); 
      break; 
    } 
    return true; 
} 
+0

Điều này có vẻ không liên quan gì đến câu hỏi này. –

0

Các Preferences chung sẽ tạo ra dưới /data/data/appname/shared_prefs/prefs_name.xml

0

Như đã đề cập trong ý kiến ​​khác, bạn sẽ không bao giờ được trực tiếp tương tác với các tập tin sở thích chia sẻ. Bạn đọc và viết các giá trị cho chúng bằng cách sử dụng một đối tượng SharedPreferences. Phương thức Context.getSharedPreferences() lấy một chuỗi làm đối số đầu tiên của nó (tên của tệp tùy chọn được chia sẻ mà bạn muốn tương tác) và trả về đối tượng SharedPreferences. Theo số documentation for the getSharedPreferences() method:

Nếu một tệp tùy chọn không tồn tại, nó sẽ được tạo khi bạn truy xuất trình soạn thảo (SharedPreferences.edit()) rồi cam kết thay đổi (Editor.commit()).

Vì vậy, khi tệp tùy chọn được chia sẻ được tạo. Các phương thức khác trả về các đối tượng SharedPreferences chỉ làm điều tương tự trong các ngữ cảnh khác nhau.

Ví dụ:

Các Activity.getPreferences() phương pháp

chỉ đơn giản gọi getSharedPreferences cơ bản (String, int) phương pháp bằng cách thông qua tên lớp của hoạt động này như tên sở thích.