佔個坑位,往後增長,哈哈html
-----------------分割線-------------------java
發了以上這篇日誌,竟然意外的訪問量飆升,幾小時閱讀破百。android
真心搞不懂,是否是我這個標題太惹人注意了。真心感受對不起觀衆。我必定會抓緊學習。多記錄些。git
-----------------分割線------------------- github
2015-05-15 01:10:37 數據庫
以前作一個練手App,把公司手機網站作成了Android原生界面,沒有寫啥代碼。主要是爲了熟悉 服務器
Android自帶控件的屬性app
視圖佈局的組織eclipse
Activity的生命週期、跳轉、傳值等async
如今開始着手開展第二個練手的App。方向是作一個大學的新聞的客戶端。我想應該有不少能夠值得實踐的。始終以爲一個良好的代碼組織結構,是一個優秀程序的良好開端。在github還有gitosc上找了一些新聞客戶端,作參考。感受結構挺混亂的,僅僅爲了練手的 感受。因此只能找非新聞類的開源App來作參考,正好今天欣喜的發現osc的Android開源客戶端的v2版本已經公佈在gitosc上。因而邊學分析,邊學着開始作下。
首先在App的包下有4個文件,做爲初學者,我一開始不太明白,爲啥須要這幾個東西。
研究了一會之後,我以爲大概多是這樣子的:
AppConfig:應用程序配置類,方便在應用代碼各處調用到配置信息
AppContent:繼承於Application,全局應用程序類,能夠對應用的整個生命週期進行一個控制,另外給非Activity類提供context。
AppException:應用程序異常類,用於捕獲異常和提示錯誤信息。能夠對錯誤和異常作一些自定義操做,好比記錄日誌、上傳到第三方服務平臺等
AppManger:其實作一個就是ActivityManger,對Activity的棧進行管理(我暫時這麼理解)。《第一行代碼》中,舉了個例子,打開了N個Acitviy後,想在程序中直接退出。那麼就須要銷燬全部的Activity,那這個時候,就須要有個東西來記錄,到底哪裏Activity被建立了、已被銷燬、還存在哪些,才能在須要的時候作相應的操做。
固然,以上幾個文件,結構都是參考osc的App,可是裏面的代碼我暫時還都空着。我想每一個App在結構上都是須要這幾個文件的,但確定會有差別。因此準備慢慢往下寫。在必要的時候,加入必要的代碼。
另外,在這個App中我選擇了XUtils做爲輔助工具庫,如今仍是小白,先借別人的成果用下。做爲工程師,我以爲沒有必要重複早輪子。可是必須知道輪子是怎麼造出來的。留着往後慢慢研究:)
2015-05-15 12:19:46
1 2 3 4 5 6 7 8 |
alt+f8 debug時選中查看值 f8至關於eclipse的f6跳到下一步 shift+f8至關於eclipse的f8跳到下一個斷點,也至關於eclipse的f7跳出函數 f7至關於eclipse的f5就是進入到代碼 alt+shift+f7這個是強制進入代碼 ctrl+shift+f9 debug運行java類 ctrl+shift+f10正常運行java類 command+f2中止運行 |
Intellij IDEA調試功能使用總結
http://www.cnblogs.com/Bowu/p/4026117.html
2015-05-16 11:39:07
暫時主要用於啓動切面延遲幾面之後跳轉到主界面。
http://my.oschina.net/zx0211/blog/415629
2015-05-17 00:53:44
決定不用xutils,僅做參考。改用osc的app中使的butterknife做爲註解工具,看了下感受挺不錯的。註釋雖然是英文的感受仍是蠻全的,比較喜好。
做爲新手,比較原始的代碼多是這樣子的:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); final TextView tvTest = (TextView) findViewById(R.id.tv_test); tvTest.setText("i am test"); tvTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tvTest.setText("i am superman"); } }); }
用了註解之後,感受代碼層次性更強了,也更加優雅了,duang的一下高富帥的感受:
@InjectView(R.id.tv_test) TextView tvTest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); ButterKnife.inject(this); tvTest.setText("i am test"); } @OnClick(R.id.tv_test) public void tvTest_OnClick() { tvTest.setText("i am superman"); }
還有不少地方能夠用到,這裏只是舉個例子,還有不少可讓你用:
2015-05-19 22:18:17
A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running (sort of like a "sub activity" that you can reuse in different activities).
摘自:http://developer.android.com/guide/components/fragments.html
Fragment至關於在一個Activity中的一個行爲或一部分。你能夠在一個Activity中結合多個Fragment來用於構建多視圖(多窗格?),還能夠在多Activity中服用一個Fragment。佈局中構建一個多窗格的UI和重用在多個活動單活性片斷。你能夠認爲fragment是Activity的一個模塊化的部件,而且有它本身的生命週期,接受他本身的輸入事件,甚至你能夠在Activity運行的時候將它添加或者刪除。(有點像一個「子Activity」,你能夠在不一樣的Activity中重複使用)。
英語水平有限,湊合着看吧:)愈來愈以爲看谷歌的文檔很是重要,簡單的一段話,足以讓你明白fragment的重要性。我隱約以爲,這將對構建一個結構合理的App相當重要。
和Activity同樣Fragment,擁有本身的獨立的生命週期。可是和Activity相比,他的生命週期可能更加多一點。由於Fragment最終仍是須要依託於Fragment。
如下一張圖,可讓咱們經過與Activity生命週期的對比,來了解Fragment的生命週期:
2015-05-19 23:07:51
找谷哥、度娘隨便一問,一籮筐,這裏就再也不贅述了。只在此記錄下,本身以爲的重要的幾個要點:
區分onCreate和onCreateView
onCreate是指建立該fragment,相似於Activity.onCreate,你能夠在其中初始化除了view以外的東西;
onCreateView是建立該fragment對應的視圖,你必須在這裏建立本身的視圖並返回給調用者。具體代碼中的呈現爲return一個view。
若是須要調用包含fragment的Activity相關的內容,須要在onActivityCreated中進行,以確保Activity已被構建完畢。
一般會使用一個空的FrameLayout做爲fragment的容器。
初始化的時候,能夠什麼都沒有。在Activity在運行過程當中,在FrameLayout中添加、刪除、替換Fragment。
好比:
getFragmentManager().beginTransaction().replace(R.id.xxxx,new xxxxFragment()).commit();
太多使用場景了,暫時尚未在實踐項目中用到,後續確定還有不少,之後在再更新
2015-05-20 01:50:55
閱讀文章:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2328334.html
雖然這篇文章中有些類已經Deprecated了,本身稍微看下Android的源碼就知道用什麼類代替了。除此以外,經過這篇文章,足以帶你體驗一下Adapter的基本使用。
記錄下本身的實踐代碼
/* * Copyright (c) 2005-2015. CNVP by Michael.Z */ package com.cnvp.zstunews.ui; import android.app.Fragment; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.support.annotation.Nullable; import android.support.v4.widget.SimpleCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Toast; import com.cnvp.zstunews.AppContext; import com.cnvp.zstunews.R; import java.util.ArrayList; import java.util.List; /** * @author 聽風 Michael.Z */ public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.test_fragment, container, false); ListView listView = new ListView(container.getContext()); // 簡單使用,未註釋部分功能爲讀取手機聯繫人名字,並顯示到ListView,而且點擊的時候用Toast顯示名字 // listView.setAdapter(new ArrayAdapter<>(container.getContext(), android.R.layout.simple_expandable_list_item_1, getData())); final Cursor cur = getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); SimpleCursorAdapter curAdp = new SimpleCursorAdapter(container.getContext(), android.R.layout.simple_list_item_2, cur, new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.CONTACT_STATUS }, new int[] { android.R.id.text1, android.R.id.text2 }, 0); listView.setAdapter(curAdp); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplication(), cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)), Toast.LENGTH_SHORT).show(); } }); ll.addView(listView); return ll; } private List<String> getData() { List<String> data = new ArrayList<>(); data.add("測試數據1"); data.add("測試數據2"); data.add("測試數據3"); data.add("測試數據4"); return data; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public AppContext getApplication() { return (AppContext) getActivity().getApplication(); } }
第三方庫:Android-async-http、Volley、Apache HttpClient、HttpURLConnection
佔個坑
佔個坑
佔個坑