利用Fragment實(shí)現(xiàn)列表內(nèi)容顯示

在平板上實(shí)現(xiàn)的效果如下:


這里寫圖片描述

左邊使用ListFragment角雷,靜態(tài)加載姻成,調(diào)用setAdapter()設(shè)置Adapter即可。右邊使用了動(dòng)態(tài)加載上遥。Activity通過實(shí)現(xiàn)在ListFragment中的內(nèi)部接口刽肠,這樣Fragment就可以調(diào)用該回調(diào)方法將數(shù)據(jù)傳給Activity溃肪。

  • 首先用于內(nèi)容顯示的數(shù)據(jù)類
package com.example.myactionbardemo.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * Created by W on 2016/7/30.
 */
public class StartContent {
    //定義一個(gè)內(nèi)部類
    public static class Star{
        public Integer id;
        public String name;
        public String desc;

        public Star(Integer id, String name, String desc) {
            this.id = id;
            this.name = name;
            this.desc = desc;
        }

        @Override
        public String toString() {
            return name;
        }
    }

    public static List<Star> ITEMS = new ArrayList<Star>();

    public static Map<Integer, Star> ITEM_MAP = new HashMap<Integer, Star>();
    static {
        addItem(new Star(1, "易烊千璽", "跳舞擔(dān)當(dāng)"));
        addItem(new Star(2, "王源", "特別可愛"));
        addItem(new Star(3, "王俊凱", "隊(duì)長"));
    }

    public static void addItem(Star star){
        ITEMS.add(star);
        ITEM_MAP.put(star.id, star);
    }
}

  • 然后布局視圖,左邊添加了StarListFragment音五,右邊是一個(gè)FrameLayout 的容器
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:divider="?android:attr/dividerHorizontal"
    android:showDividers="middle">
    <fragment
        android:name="com.example.myactionbardemo.StarListFragment"
        android:id="@+id/star_list"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    <FrameLayout
        android:id="@+id/star_list_detail"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"/>

</LinearLayout>
  • 左邊的ListFragment代碼如下
package com.example.myactionbardemo;

import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.myactionbardemo.model.StartContent;

/**
 *
 * Created by W on 2016/7/30.
 */
public class StarListFragment extends ListFragment {

    private Callbacks mCallbacks;
    //定義一個(gè)回調(diào)接口惫撰,在Activity中需要實(shí)現(xiàn)
    //該Framgent將通過該接口與他它所在的Activity交互
    public interface Callbacks{
      void onItemSelectedListener(Integer id);
    }

    @Override
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //ArrayAdapter()里的第二個(gè)參數(shù)是系統(tǒng)提供的布局,第三個(gè)是布局里TextView的id
        setListAdapter(new ArrayAdapter<StartContent.Star>(getActivity()
                , android.R.layout.simple_list_item_activated_1,
                android.R.id.text1, StartContent.ITEMS));
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (!(activity instanceof Callbacks)){
            throw new IllegalStateException("必須實(shí)現(xiàn)Callbacks接口");
        }
        mCallbacks = (Callbacks) activity;
    }

    @Override
    public void onDetach() {
        super.onDetach();

        mCallbacks = null;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        //回調(diào)該接口放仗,傳入了id
        mCallbacks.onItemSelectedListener(StartContent.ITEMS.get(position).id);
    }
}

  • StarDetailFragmentjava
package com.example.myactionbardemo;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.myactionbardemo.model.StartContent;

/**
 *
 * Created by W on 2016/7/30.
 */
public class StarDetailFragment extends Fragment{
    public static final String ITEM_ID = "item_id";
    StartContent.Star star;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments().containsKey(ITEM_ID)){
          star = StartContent.ITEM_MAP.get(getArguments().getInt(ITEM_ID));
        }
    }

    @Nullable
    @Override
    //傳入布局
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_start_detail, container, false);
        if (star != null){
            TextView textView = (TextView) view.findViewById(R.id.star_name);
            textView.setText(star.name);
            TextView textView1 = (TextView) view.findViewById(R.id.star_desc);
            textView1.setText(star.desc);

        }
        return view;

    }
}

  • 顯示在StarDetailFragment的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
        style="?android:attr/textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/star_name"
        android:padding="16dp"/>
    <TextView
        style="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/star_desc"
        android:padding="16dp"/>

</LinearLayout>
  • 最后的Activity實(shí)現(xiàn)了從ListFrgment到StarDetailFragment的數(shù)據(jù)傳遞润绎。
package com.example.myactionbardemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

/**
 *
 * Created by W on 2016/7/30.
 */
 //實(shí)現(xiàn)了內(nèi)部接口
public class ListFragmentActivity extends AppCompatActivity implements StarListFragment.Callbacks{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_star_two);
    }

    @Override
    public void onItemSelectedListener(Integer id) {
        Bundle bundle = new Bundle();
        bundle.putInt(StarDetailFragment.ITEM_ID, id);
        StarDetailFragment fragment = new StarDetailFragment();
        fragment.setArguments(bundle);
        getFragmentManager().beginTransaction().replace(R.id.star_list_detail,fragment).commit();
    }
}

使用內(nèi)部接口來進(jìn)行Fragment和Activity傳遞數(shù)據(jù)撬碟,真的很奇妙诞挨,編程就是如此奇妙啊啊啊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呢蛤,隨后出現(xiàn)的幾起案子惶傻,更是在濱河造成了極大的恐慌,老刑警劉巖其障,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件银室,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡励翼,警方通過查閱死者的電腦和手機(jī)蜈敢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汽抚,“玉大人抓狭,你說我怎么就攤上這事≡焖福” “怎么了否过?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惭蟋。 經(jīng)常有香客問我苗桂,道長,這世上最難降的妖魔是什么告组? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任煤伟,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘持偏。我一直安慰自己驼卖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布鸿秆。 她就那樣靜靜地躺著酌畜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卿叽。 梳的紋絲不亂的頭發(fā)上桥胞,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音考婴,去河邊找鬼贩虾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沥阱,可吹牛的內(nèi)容都是我干的缎罢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼考杉,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼策精!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起崇棠,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤咽袜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枕稀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體询刹,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年萎坷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凹联。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哆档,死狀恐怖蔽挠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虐呻,我是刑警寧澤象泵,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站斟叼,受9級(jí)特大地震影響偶惠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朗涩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一忽孽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦兄一、人聲如沸厘线。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽造壮。三九已至,卻和暖如春骂束,著一層夾襖步出監(jiān)牢的瞬間耳璧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工展箱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旨枯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓混驰,卻偏偏與公主長得像攀隔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栖榨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容