Android開發學習記錄(2015-05-19 23:05:34更新)

佔個坑位,往後增長,哈哈html

-----------------分割線-------------------java

發了以上這篇日誌,竟然意外的訪問量飆升,幾小時閱讀破百。android

真心搞不懂,是否是我這個標題太惹人注意了。真心感受對不起觀衆。我必定會抓緊學習。多記錄些。git

-----------------分割線------------------- github


學着組織一個Android App

2015-05-15 01:10:37 數據庫

    以前作一個練手App,把公司手機網站作成了Android原生界面,沒有寫啥代碼。主要是爲了熟悉 服務器

  • Android自帶控件的屬性app

  • 視圖佈局的組織eclipse

  • Activity的生命週期、跳轉、傳值等async

    如今開始着手開展第二個練手的App。方向是作一個大學的新聞的客戶端。我想應該有不少能夠值得實踐的。始終以爲一個良好的代碼組織結構,是一個優秀程序的良好開端。在github還有gitosc上找了一些新聞客戶端,作參考。感受結構挺混亂的,僅僅爲了練手的 感受。因此只能找非新聞類的開源App來作參考,正好今天欣喜的發現osc的Android開源客戶端的v2版本已經公佈在gitosc上。因而邊學分析,邊學着開始作下。

    首先在App的包下有4個文件,做爲初學者,我一開始不太明白,爲啥須要這幾個東西。

    研究了一會之後,我以爲大概多是這樣子的:

  1. AppConfig:應用程序配置類,方便在應用代碼各處調用到配置信息

  2. AppContent:繼承於Application,全局應用程序類,能夠對應用的整個生命週期進行一個控制,另外給非Activity類提供context。

  3. AppException:應用程序異常類,用於捕獲異常和提示錯誤信息。能夠對錯誤和異常作一些自定義操做,好比記錄日誌、上傳到第三方服務平臺等

  4. AppManger:其實作一個就是ActivityManger,對Activity的棧進行管理(我暫時這麼理解)。《第一行代碼》中,舉了個例子,打開了N個Acitviy後,想在程序中直接退出。那麼就須要銷燬全部的Activity,那這個時候,就須要有個東西來記錄,到底哪裏Activity被建立了、已被銷燬、還存在哪些,才能在須要的時候作相應的操做。

    固然,以上幾個文件,結構都是參考osc的App,可是裏面的代碼我暫時還都空着。我想每一個App在結構上都是須要這幾個文件的,但確定會有差別。因此準備慢慢往下寫。在必要的時候,加入必要的代碼。

    另外,在這個App中我選擇了XUtils做爲輔助工具庫,如今仍是小白,先借別人的成果用下。做爲工程師,我以爲沒有必要重複早輪子。可是必須知道輪子是怎麼造出來的。留着往後慢慢研究:)


在Android Studio中學會如何使用調試

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


Android中延遲執行某個任務

2015-05-16 11:39:07

暫時主要用於啓動切面延遲幾面之後跳轉到主界面。

http://my.oschina.net/zx0211/blog/415629


使用註解來代替findViewById、onclick等事件

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"); }

還有不少地方能夠用到,這裏只是舉個例子,還有不少可讓你用:


學會Fragment的基本使用

2015-05-19 22:18:17

Fragment是個什麼東西?

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相當重要。

Fragment的生命週期

和Activity同樣Fragment,擁有本身的獨立的生命週期。可是和Activity相比,他的生命週期可能更加多一點。由於Fragment最終仍是須要依託於Fragment。

如下一張圖,可讓咱們經過與Activity生命週期的對比,來了解Fragment的生命週期:

Fragment的基礎使用方法

2015-05-19 23:07:51

找谷哥、度娘隨便一問,一籮筐,這裏就再也不贅述了。只在此記錄下,本身以爲的重要的幾個要點:

  1. 區分onCreate和onCreateView

    onCreate是指建立該fragment,相似於Activity.onCreate,你能夠在其中初始化除了view以外的東西;

    onCreateView是建立該fragment對應的視圖,你必須在這裏建立本身的視圖並返回給調用者。具體代碼中的呈現爲return一個view。

  2. 若是須要調用包含fragment的Activity相關的內容,須要在onActivityCreated中進行,以確保Activity已被構建完畢。

  3. 一般會使用一個空的FrameLayout做爲fragment的容器。

    初始化的時候,能夠什麼都沒有。在Activity在運行過程當中,在FrameLayout中添加、刪除、替換Fragment。

    好比:

    getFragmentManager().beginTransaction().replace(R.id.xxxx,new xxxxFragment()).commit();

  4. 太多使用場景了,暫時尚未在實踐項目中用到,後續確定還有不少,之後在再更新

Adapter的基本使用

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

把數據寫本地數據庫

佔個坑

讀取本地數據庫,並顯示到ListView

佔個坑

使用開源組件,實現上拉刷新,下拉加在更多

佔個坑

相關文章
相關標籤/搜索