手機商城第一天 loading介面,主介面與baseFragment的建立,Bufferknife的使用

來源:互聯網
上載者:User

標籤:手機商城第一天 loading介面   主介面與basefragment的建立   bufferknife的使用   

        之前的手機影音經過這2天的總結,又從新掌握了不少之前忘記的知識,加深了對於知識的印象,下面的這個是一個新的項目,商城APP,有用到很多舊的知識,當然又有很多新的知識等著我去挑戰、學習。

        代碼託管到碼雲上,有興趣的可以去下載看看

    https://git.oschina.net/joy_yuan/ShoppingMall


    1、建立loading介面

        loading介面說白了就是一個簡單布局的activity,在這個activity的oncreate方法裡,利用handler發送一個延遲2秒的intent,跳轉到主Activity裡,注意在跳轉後,finish()掉這個activity。

    注意這裡有onTouchEvent回調事件,就是我們之前上個項目手機影音裡的功能,在loading介面觸碰下螢幕,馬上跳轉到首頁面。

package com.yuanlp.shoppingmall.activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.view.MotionEvent;import com.yuanlp.shoppingmall.R;public class SplashActivity extends AppCompatActivity {;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_splash);       new Handler().postDelayed(new Runnable() {            @Override            public void run() {                startToActivity();            }        }, 2000);    }    private void startToActivity() {        Intent intent=new Intent(SplashActivity.this,MainActivity.class);        this.startActivity(intent);        finish();    }    @Override    public boolean onTouchEvent(MotionEvent event) {        startToActivity();        return super.onTouchEvent(event);    }    @Override    protected void onDestroy() {        super.onDestroy();    }}

        此時需要在AndroidManifext.xml裡註冊啟動的activity是SplashActivity

            

<activity android:name=".activity.SplashActivity">    <intent-filter>        <action android:name="android.intent.action.MAIN"/>        <category android:name="android.intent.category.LAUNCHER"/>    </intent-filter></activity>


    而我們在觸碰到螢幕後,馬上跳轉,如果不做處理,那麼handler的那個2秒延遲也會跳轉到MainActivity,相當於開啟了2個。在這裡設定MainActivity 的啟動模式為singleTask,即在Task棧中,只會存在一個Activity。

    

<activity    android:name=".activity.MainActivity"    android:launchMode="singleTask"></activity>


2、MainActivity 

        a 布局檔案

        這個布局與上個項目手機影音類似,都是最外邊是一個LinearLayout,豎直方向排版。

            在LinearLayout裡有2個子布局,上面是FrameLayout,下面是一個RadioGroup.

    

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#ffffff"    android:orientation="vertical"    tools:context="com.yuanlp.shoppingmall.activity.MainActivity"    >    <FrameLayout        android:id="@+id/framelayout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"/>    <RadioGroup        android:id="@+id/rg_main"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:background="@drawable/home_bottom_parent_bg"        android:orientation="horizontal">        <RadioButton            android:id="@+id/rb_home"            android:text="首頁"        android:drawableTop="@drawable/home_button_selector"        style="@style/MainButtonStyle"        android:layout_width="match_parent"        android:layout_height="match_parent"/>        <RadioButton            android:id="@+id/rb_type"            android:text="分類"            android:drawableTop="@drawable/type_button_selector"            style="@style/MainButtonStyle"            android:layout_width="match_parent"            android:layout_height="match_parent"/>        <RadioButton            android:id="@+id/rb_community"            android:text="發現"            android:drawableTop="@drawable/community_button_selector"            style="@style/MainButtonStyle"            android:layout_width="match_parent"            android:layout_height="match_parent"/>        <RadioButton            android:id="@+id/rb_cart"            android:text="購物車"            android:drawableTop="@drawable/cart_button_selector"            style="@style/MainButtonStyle"            android:layout_width="match_parent"            android:layout_height="match_parent"/>        <RadioButton            android:id="@+id/rb_user"            android:text="購物車"            android:drawableTop="@drawable/user_button_selector"            style="@style/MainButtonStyle"            android:layout_width="match_parent"            android:layout_height="match_parent"/></RadioGroup></LinearLayout>

        b、在activity裡,如果要一個一個的手動去執行個體化控制項,比較麻煩,如果有更加複雜的布局,那麼手動寫起來很累,就需要用到ButterKnife外掛程式。

            在build.gradle裡加入如下,aysn一下即可加入

        compile ‘com.jakewharton:butterknife:8.7.0‘  annotationProcessor ‘com.jakewharton:butterknife-compiler:8.7.0‘

          然後在Mainactivity裡就可以使用,預設先選中首頁home這個radiobutton

    

package com.yuanlp.shoppingmall.activity;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.widget.FrameLayout;import android.widget.RadioButton;import android.widget.RadioGroup;import com.yuanlp.shoppingmall.R;import butterknife.BindView;import butterknife.ButterKnife;public class MainActivity extends FragmentActivity {    @BindView(R.id.framelayout)    FrameLayout mFramelayout;    @BindView(R.id.rb_home)    RadioButton mRbHome;    @BindView(R.id.rb_type)    RadioButton mRbType;    @BindView(R.id.rb_community)    RadioButton mRbCommunity;    @BindView(R.id.rb_cart)    RadioButton mRbCart;    @BindView(R.id.rb_user)    RadioButton mRbUser;    @BindView(R.id.rg_main)    RadioGroup mRgMain;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //綁定butterknife與activity,執行個體化控制項        ButterKnife.bind(this);        mRgMain.check(R.id.rb_home);    }}

      

3 因為要通過下方的radiobutton的選中來切換上面的Fragment,就需要寫一個BaseFragment。

        比較下Activity與Fragment的生命週期

    由於圖片比較模糊,可以參考部落格:http://blog.csdn.net/forever_crying/article/details/8238863/

        自訂的Fragment繼承Fragment,一定要導的是V4包裡的

            自訂的Fragment至少要重寫3個方法

            1、onCreate   子類要用到context,需要在這裡擷取

             2、onCreateView  這裡是展示給頁面UI的地方,展示的是return的View

            3、onActivityCreated 這裡是activity被建立好之後回調,在這裡可以初始化自訂view,擷取Fragment裡的資料

            

package com.yuanlp.shoppingmall.base;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * 基本的Fragement,其他幾個頁面都要繼承這個基類 * 繼承fragment必須重寫至少3個方法, *  1、onCreate  擷取context *  2、onCreateView  展示UI布局 *  3、onActivityCreated  初始化各種空間,擷取資料等 */public abstract class BaseFragement extends Fragment {    protected Context context;    /**     * onCreate是指建立該fragment,類似於Activity.onCreate,你可以在其中初始化除了view之外的東西;     * @param savedInstanceState     */    @Override    public void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        context=getActivity();    }    /**     * onCreateView是建立該fragment對應的視圖,你必須在這裡建立自己的視圖並返回給調用者。負責UI的建立顯示     * @param inflater     * @param container     * @param savedInstanceState     * @return     */    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        return initview();        //如下面這個代碼就是在home首頁面時,inITview裡,return這個view來展示這個布局        // View view = View.inflate(mContext, R.layout.fragment_home, null);    }    /**     * 強制子類實現他,讓在oncreateview裡顯示這個布局。     * @return     */    public abstract View initview();    /**     * 當activity被完全啟動時回調,在這裡初始化自訂的view。 這裡負責資料擷取     * @param savedInstanceState     */    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        initData();    }    /**     * 當子類需要連網擷取資料時,可以重寫該方法     */    public void initData() {    }}附一個關於onCreateView 與onActivityView 的區別解釋:    android開發—Fragment中onCreateView()和onActivityCreated()的區別    ①靜態view不需要onActivityCreated     ②儲存view的狀態的時候需要用onActivityCreated     ③訪問父activity的view層的時候需要在onActivityCreated 方法裡面做     即如果view是靜態,那麼沒有必要在onActivityCreated 方法去調用,大多數的自訂的view,初始化時都需要一個context,而activity是context的子類,所以在onCreateView方法的時候非靜態view初始化調用可能出現異常,所以對於非靜態view,最好在onActivityCreated方法調用


本文出自 “YuanGuShi” 部落格,請務必保留此出處http://cm0425.blog.51cto.com/10819451/1953464

手機商城第一天 loading介面,主介面與baseFragment的建立,Bufferknife的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.