android Settings入門


五年了,該走了。感謝qisda.

分析下settings的啟動過程。版本是4.0的。在Launcher的public boolean onCreateOptionsMenu(Menu menu) 設置了如何啟動settings. 就是發送個Intent.

 Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
        settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

進入了app/Settings onCreate--->super.onCreate(PreferenceAcrtivity)-->setContentView(com.android.internal.R.layout.preference_list_content);

這句是布置了畫面。然后會回調public void onContentChanged()獲取了listView的對象。然后繼續往下進入了--》

onBuildHeaders(mHeaders);這個東西是關鍵,這個實際叫到了Settings->onBuildHeaders 這個函數會解釋xml 也就是畫面文件了。loadHeadersFromResource(R.xml.settings_headers, headers);這個東西就是在解釋xml文件,蘇州qisda, 臧春傑  如何解釋xml呢?呵呵。這個有固定格式的 這里也是用到了Adatper, private static class HeaderAdapter extends ArrayAdapter<Header>, 既然是adapter, 哪肯定都是前台顯示和數據源關聯起來,前台就是listview.哪真正的數據就是解釋的xml存放到了arrayList里了。也就是mHeaders,

  target.add(header); 繼續從PreferenceActivity onCreate往下走,到了else if (mHeaders.size() > 0) {
            setListAdapter(new HeaderAdapter(this, mHeaders));

這就是把剛才的數據源綁定到了Adapter, 已被listview借口轉換。這樣就可以通過getView返回了,當時這里都是使用了tag 加判斷重用。一貫的做飯,nancy很清楚的。

同時listView 注冊了listener  mList.setOnItemClickListener(mOnClickListener);

private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id)
        {
            onListItemClick((ListView)parent, v, position, id);
        }
    };

當用戶touch的時候,在settings里告訴系統做什么。

 

 protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);  //蘇州 佳世達 臧春傑

 

        if (mAdapter != null) {
            Object item = mAdapter.getItem(position);
            if (item instanceof Header) onHeaderClick((Header) item, position);
        }
    }

最后進入到了settings-->onHeaderClick 做處理,當然叫到了preferenceActivity的 onHeaderClick 如果用戶指定了fragement. 哪就

startWithFragment(header.fragment, header.fragmentArguments, null, 0,
                        titleRes, shortTitleRes);

如果用戶沒指定,就直接啟動else if (header.intent != null) {
            startActivity(header.intent);
        }

 

 以上就是settings啟動過程。 當然后續還會有進入fragement的動作。還有settings provider的數據庫存儲。先寫到這里。讓nancy瀏覽。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM