jetpack 获取NavController的3种方式

jetpack里建议ui用fragment组建,但是不像传统的方式自行管理fragment的示例,采用和activity类似的思想,托管给框架,注册给nav.xml,通过NavController来控制fragment,主要是控制跳转。

navigation有2种依赖包
– 基本

    implementation "android.arch.navigation:navigation-fragment:1.0.0-alpha07"
    implementation "android.arch.navigation:navigation-ui:1.0.0-alpha07"
  • KTX
    implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha07"
    implementation "android.arch.navigation:navigation-ui-ktx:1.0.0-alpha07"

获取方式也自然分2种

  • 基本

通过activity获取
Navigation.java

public static NavController findNavController(@NonNull Activity activity, @IdRes int viewId) 

通过view获取
Navigation.java

public static NavController findNavController(@NonNull View view)

通过Fragment获取
NavHostFragment.java

public static NavController findNavController(@NonNull Fragment fragment)
– KTX

通过activity获取

fun Activity.findNavController(@IdRes viewId: Int): NavController

通过view获取

fun View.findNavController(): NavController

通过Fragment获取

fun Fragment.findNavController(): NavController

jetpack navigation BottomNavigationView不切换可能的坑

navigation文件里定义的item要能在nav.xml里有对应

    <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            app:menu="@menu/navigation"/>

navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
            android:id="@+id/missionFragment"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="任务"/>

    <item
            android:id="@+id/readFragment"
            android:icon="@drawable/ic_dashboard_black_24dp"
            android:title="读卡"/>

</menu>

nav.xml

    <?xml version="1.0" encoding="utf-8"?>
    <navigation 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:id="@+id/navi_graph"
                app:startDestination="@id/missionFragment">

        <fragment android:id="@+id/missionFragment" android:name="cn.com.gmcc.sign.fragment.MissionFragment"
                  android:label="任务列表" tools:layout="@layout/fragment_mission">
        </fragment>
        <fragment android:id="@+id/readFragment" android:name="cn.com.gmcc.sign.fragment.ReadFragment"
                  android:label="读卡" tools:layout="@layout/fragment_read"></fragment>
    </navigation>

android TextClock

从Android 4.2开始增加了TextClock组件,继承自TextView。用途是动态数字时钟。自动识别系统的时间是12小时制还是24小时制,根据设置的格式显示。不需要程序内自己做线程或者延时迭代实现,最省力。

 <TextClock
                android:id="@+id/timeTc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:format24Hour="yyyy年MM月dd日 HH:mm:ss"
                android:format12Hour="yyyy年MM月dd日 hh:mm:ss"
                android:text="2018年07月02日 10:00:00"
                android:textColor="#010110"
                android:textSize="18sp" />

如果不想根据系统的12小时制或者24小时制走,可以在设置格式化格式的时候都设置成一种格式,比如24小时制,就可以format24Hour和format12Hour都用yyyy年MM月dd日 HH:mm:ss格式

nginx https 反代 http服务

主要是proxy_redirect off起作用

location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }

idea surround with quotes

idea->settings->editor->smart keys
选中surround selection on typing qoute or brace

然后选中需要加引号的文字,按住shit+引号就会自动在文字外包一层引号。

yml的数据类型

yml的值本身是有类型的,会自动类型推断。
但是数字作为字符串使用的要特殊注意,主动加上引号,避免歧义。而数字类型又有进制问题,会自动判断是不是其他进制,自动转成10进制。
#数字类型
key1:123
#字符串类型
key2:’123′
#8进制数字会自动转换成10进制的76
key3:0114