2017年4月19日 星期三

[Android] Fragment之間切換

我們在Activity可以用startActivity() / startActivityForResult()來切換Activity之間

但是Fragment之間要怎麼切換呢?

這邊使用TabHost 來分成多頁,在每個Fragment之間要怎麼切換,就是個問題

我們使用FragmentTransaction+FragmentManager來處理這個問題

example:

Fragment galleryFragment = new GalleryFragment();
Bundle args = new Bundle();
args.putString("參數名稱", 參數);
galleryFragment.setArguments(args);//pass argument to target fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();

ft.replace(R.id.container,galleryFragment);
ft.addToBackStack(null);
ft.commit();

GalleryFragment是目的fragment,而這段則是寫在來源fragment

但這邊可能會遇到一個問題(bug)

No View Found For id ...... (illegalStateException)

該怎辦呢?
問題就出在ft.replace(R.id.container,galleryFragment)這行
這個R.id.container必須要在TabHost(Parent)裡面的XML有個FrameLayout

看一下這個TabHost的xml:

<android.support.v4.app.FragmentTabHost    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/tabhost"    android:layout_width="match_parent"    android:layout_height="match_parent"    >
    <LinearLayout        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="match_parent"        >
        <!-- Tab標籤 -->        <TabWidget            android:id="@android:id/tabs"            android:orientation="horizontal"            android:layout_width="match_parent"            android:layout_height="wrap_content"            />

        <FrameLayout            android:id="@android:id/tabcontent"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:visibility="gone"            />

        <!-- 標籤內容顯示區塊 -->        <FrameLayout            android:id="@+id/container"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_weight="1"            />

    </LinearLayout>

</android.support.v4.app.FragmentTabHost>

有看到@+id/container這個,如果你隨便打content_frame(直接照抄之類的容易出現這樣的錯誤)

就會找不到這個id 因此就在跳轉的時候出現錯誤,所以搞懂了這個問題以後,就可以自己改寫囉!

end

2017年4月12日 星期三

[java] Abstract用法

在寫android app的時候,遇到了一些問題,於是又跑到這邊來記錄一下。


所謂的abstract就是在父類別不實做這個方法,到子類別繼承此父類別時候就可以自由運用(發揮)


ex:


class abstract father
{
    public abstract void test(string str);
    public void main()
   {
           String str = "test";
           test(str);
   }
}

----------------------------------------


class son extends father
{
    public void test(String str)
    {
          //做這邊想要做的事情
          //override (覆寫)
          system.out.print(str);
    }

}


最後在使用的時候可以用

father f = new son();

這樣來宣告

f.main();

則會print 文字test出來

end