Android UI詳解之Fragment實例詳解

jopen 11年前發布 | 48K 次閱讀 Android開發 移動開發 Android UId UI

上一篇我們講解了Fragment的加載方式,這次我們以一個實例來講解:

布局:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

<fragment class="com.xys.fragmentdemo.TitleFragment"
    android:id="@+id/titles"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
<FrameLayout android:id="@+id/detials"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/darker_gray"></FrameLayout>

</LinearLayout >

以上布局文件中使用了fragment標簽和FrameLayout標簽。Android Fragment使用 中介紹了2中嵌入Fragment的方法,這個實例中都用到,從布局文件看到有了fragment標簽,這是一種使用方法,FrameLayout標簽將會成為第二種加載fragment的載體view。

TitleFragment:

package com.xys.fragmentdemo;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class TitleFragment extends ListFragment {

    public int currentChoosePosition=0;
    public int showChoosePosition=-1;

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        showDetials(position);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1,Data.TitleData));
        if(savedInstanceState!=null){
            currentChoosePosition=savedInstanceState.getInt("currentChoose",0);
            showChoosePosition=savedInstanceState.getInt("showChoose",-1);
        }
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        outState.putInt("currentChoose", currentChoosePosition);
        outState.putInt("showChoose", showChoosePosition);
    }

    public void showDetials(int index){
        currentChoosePosition=index;
        getListView().setItemChecked(index, true);
        if(showChoosePosition!=currentChoosePosition){
            //獲取詳情Fragment的實例
            DetialFragment df=DetialFragment.newInstance(index);
            //獲取FragmentTransaction 實例
            FragmentTransaction ft=getFragmentManager().beginTransaction();
             //使用DetailsFragment 的實例
            ft.replace(R.id.detials, df);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();
            showChoosePosition=index;
        }
    }

}

DetialFragment:

package com.xys.fragmentdemo;

import android.app.Fragment;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
import android.widget.TextView;

//DetailsFragment 中使用newInstance(int index)方法產生DetailsFragment 實例并接受整型參數,重載了onCreateView方法創建view
public class DetialFragment extends Fragment {

    public static DetialFragment newInstance(int index) {
        // TODO Auto-generated method stub
        DetialFragment df=new DetialFragment();
        Bundle bundle=new Bundle();
        bundle.putInt("index", index);
        df.setArguments(bundle);
        return df;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if(container==null){
            return null;
        }
        ScrollView scrollView=new ScrollView(getActivity());
        TextView tv=new TextView(getActivity());
        int padding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());
        tv.setPadding(padding, padding, padding, padding);
        scrollView.addView(tv);
        tv.setText(Data.ContextData[getArguments().getInt("index",0)]);
        return scrollView;
    }

}

Data:

package com.xys.fragmentdemo;

public class Data {
    public static final String TitleData[]={"Title1","Title2","Title3","Title4","Title5"};
    public static final String ContextData[]={"Context1","Context2","Context3","Context4","Context5"};
}

國際慣例 上效果圖:

Android UI詳解之Fragment實例詳解

 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!