Browse Source

1:调整目录结构,增加Fragment组件化示例;

guiying712 8 years ago
parent
commit
2c22394982

+ 4 - 0
module_main/build.gradle

@@ -20,6 +20,7 @@ android {
                 arguments = [moduleName: project.getName()]
             }
         }
+        vectorDrawables.useSupportLibrary = true
     }
 
 
@@ -37,10 +38,13 @@ android {
         }
     }
 
+
 }
 
 dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
     compile project(':lib_common')
+    compile 'com.android.support:design:25.3.1'
+    compile 'com.android.support:support-vector-drawable:25.3.1'
 }

+ 9 - 3
module_main/src/main/AndroidManifest.xml

@@ -1,14 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.guiying.main">
+    package="com.guiying.module.main">
 
     <application android:theme="@style/AppTheme">
-        <activity android:name=".MainActivity">
+        <activity android:name="com.guiying.module.main.MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name=".BottomNavigationActivity"
+            android:label="@string/title_activity_bottom_navigation">
+
+        </activity>
     </application>
 
-</manifest>
+</manifest>

+ 68 - 0
module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java

@@ -0,0 +1,68 @@
+package com.guiying.module.main;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.BottomNavigationView;
+import android.view.MenuItem;
+
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.ViewManager;
+import com.guiying.module.common.widget.NoScrollViewPager;
+
+import java.util.List;
+
+/**
+ * <p> </p>
+ *
+ * @author 张华洋 2017/9/27 10:23
+ * @version V1.1
+ * @name BottomNavigationActivity
+ */
+public class BottomNavigationActivity extends BaseActivity {
+
+    private NoScrollViewPager mPager;
+    private List<BaseFragment> mFragments;
+    private FragmentAdapter mAdapter;
+
+    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
+            = new BottomNavigationView.OnNavigationItemSelectedListener() {
+
+        @Override
+        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+            int i = item.getItemId();
+            if (i == R.id.navigation_home) {
+                mPager.setCurrentItem(0);
+                return true;
+            } else if (i == R.id.navigation_dashboard) {
+                mPager.setCurrentItem(1);
+                return true;
+            } else if (i == R.id.navigation_notifications) {
+                mPager.setCurrentItem(2);
+                return true;
+            }
+            return false;
+        }
+
+    };
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_bottom_navigation);
+        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
+        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
+        initViewPager();
+    }
+
+    private void initViewPager() {
+        mFragments = ViewManager.getInstance().getAllFragment();
+        mPager = (NoScrollViewPager) findViewById(R.id.container_pager);
+        mAdapter = new FragmentAdapter(getSupportFragmentManager(), mFragments);
+        mPager.setPagerEnabled(false);
+        mPager.setAdapter(mAdapter);
+    }
+
+
+}

+ 40 - 0
module_main/src/main/java/com/guiying/module/main/FragmentAdapter.java

@@ -0,0 +1,40 @@
+package com.guiying.module.main;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+
+import com.guiying.module.common.base.BaseFragment;
+
+import java.util.List;
+
+/**
+ * <p>Fragments适配器 </p>
+ *
+ * @author 张华洋 2017/9/27 10:14
+ * @version V1.1
+ * @name ResourcePagerAdapter
+ */
+public class FragmentAdapter extends FragmentStatePagerAdapter {
+    private List<BaseFragment> mFragments;
+
+    public FragmentAdapter(FragmentManager fm, List<BaseFragment> mFragments) {
+        super(fm);
+        this.mFragments = mFragments;
+    }
+
+    @Override
+    public Fragment getItem(int position) {
+        return mFragments.get(position);
+    }
+
+    @Override
+    public int getCount() {
+        return mFragments != null ? mFragments.size() : 0;
+    }
+
+    @Override
+    public int getItemPosition(Object object) {
+        return android.support.v4.view.PagerAdapter.POSITION_NONE;
+    }
+}

+ 14 - 15
module_main/src/main/java/com/guiying/main/MainActivity.java → module_main/src/main/java/com/guiying/module/main/MainActivity.java

@@ -1,14 +1,14 @@
-package com.guiying.main;
+package com.guiying.module.main;
 
+import android.content.Intent;
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.View;
-import android.widget.Button;
 
 import com.alibaba.android.arouter.launcher.ARouter;
-import com.guiying.common.base.BaseActivity;
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.utils.ToastUtils;
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.common.base.ViewManager;
+import com.guiying.module.common.utils.ToastUtils;
 
 /**
  * <p>类说明</p>
@@ -19,18 +19,15 @@ import com.guiying.common.utils.ToastUtils;
  */
 public class MainActivity extends BaseActivity implements View.OnClickListener {
 
-    private long exitTime = 0;
-    protected Button newsButton;
-    protected Button girlsButton;
+    private long mExitTime = 0;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
-        newsButton = (Button) findViewById(R.id.news_button);
-        newsButton.setOnClickListener(MainActivity.this);
-        girlsButton = (Button) findViewById(R.id.girls_button);
-        girlsButton.setOnClickListener(MainActivity.this);
+        findViewById(R.id.news_button).setOnClickListener(this);
+        findViewById(R.id.girls_button).setOnClickListener(this);
+        findViewById(R.id.fragment_button).setOnClickListener(this);
     }
 
     @Override
@@ -41,6 +38,8 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
         } else if (view.getId() == R.id.girls_button) {
             //跳转到GirlsActivity
             ARouter.getInstance().build("/girls/list").navigation();
+        } else if (view.getId() == R.id.fragment_button) {
+            startActivity(new Intent(this, BottomNavigationActivity.class));
         }
     }
 
@@ -49,11 +48,11 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
             //两秒之内按返回键就会退出
-            if ((System.currentTimeMillis() - exitTime) > 2000) {
+            if ((System.currentTimeMillis() - mExitTime) > 2000) {
                 ToastUtils.showShortToast(getString(R.string.app_exit_hint));
-                exitTime = System.currentTimeMillis();
+                mExitTime = System.currentTimeMillis();
             } else {
-                BaseApplication.getIns().exitApp(this);
+                ViewManager.getInstance().exitApp(this);
             }
             return true;
         }

+ 3 - 3
module_main/src/main/java/debug/MainApplication.java

@@ -1,8 +1,8 @@
 package debug;
 
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
+import com.guiying.module.common.base.BaseApplication;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
 import com.orhanobut.logger.Logger;
 
 /**

+ 2 - 2
module_main/src/main/module/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.guiying.main">
+    package="com.guiying.module">
 
     <application
         android:name="debug.MainApplication"
@@ -9,7 +9,7 @@
         android:label="@string/app_main"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".MainActivity">
+        <activity android:name=".main.MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 9 - 0
module_main/src/main/res/drawable/ic_dashboard_black_24dp.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z" />
+</vector>

+ 9 - 0
module_main/src/main/res/drawable/ic_home_black_24dp.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" />
+</vector>

+ 9 - 0
module_main/src/main/res/drawable/ic_notifications_black_24dp.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z" />
+</vector>

+ 24 - 0
module_main/src/main/res/layout/activity_bottom_navigation.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    tools:context="com.guiying.module.main.BottomNavigationActivity">
+
+    <com.guiying.module.common.widget.NoScrollViewPager
+        android:id="@+id/container_pager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+    <android.support.design.widget.BottomNavigationView
+        android:id="@+id/navigation"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:background="?android:attr/windowBackground"
+        app:menu="@menu/navigation" />
+
+</LinearLayout>

+ 8 - 1
module_main/src/main/res/layout/activity_main.xml

@@ -9,7 +9,7 @@
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="com.guiying.main.MainActivity">
+    tools:context="com.guiying.module.main.MainActivity">
 
     <Button
         android:id="@+id/news_button"
@@ -22,4 +22,11 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="Girls" />
+
+    <Button
+        android:id="@+id/fragment_button"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Fragment" />
+
 </LinearLayout>

+ 19 - 0
module_main/src/main/res/menu/navigation.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@+id/navigation_home"
+        android:icon="@drawable/ic_home_black_24dp"
+        android:title="@string/title_home" />
+
+    <item
+        android:id="@+id/navigation_dashboard"
+        android:icon="@drawable/ic_dashboard_black_24dp"
+        android:title="@string/title_dashboard" />
+
+    <item
+        android:id="@+id/navigation_notifications"
+        android:icon="@drawable/ic_notifications_black_24dp"
+        android:title="@string/title_notifications" />
+
+</menu>

+ 4 - 0
module_main/src/main/res/values/strings.xml

@@ -2,5 +2,9 @@
     <string name="app_main">main组件</string>
 
     <string name="app_exit_hint">再按一次退出程序</string>
+    <string name="title_activity_bottom_navigation">BottomNavigationActivity</string>
+    <string name="title_home">Home</string>
+    <string name="title_dashboard">Dashboard</string>
+    <string name="title_notifications">Notifications</string>
 
 </resources>