1. 程式人生 > >在Activity上載入Fragment實現點選切換頁面

在Activity上載入Fragment實現點選切換頁面

在Activity上載入Fragment實現點選切換Fragment

沒有ViewPager的幫助,單憑Fragment實現滑動比較困難,這裡我就只給大家說一下如何實現點選切換。
首先是xml的佈局:
activity_main.xml

<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" tools:context="com.example.wtl.bk1.MainActivity" android:orientation="vertical">
<LinearLayout android:id="@+id/acttitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background
="#82FFF0">
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:layout_gravity="center" android:orientation="vertical">
<TextView //這裡是點選事件1 android:id="@+id/frag1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="關注" android:paddingBottom="5dp" android:paddingTop="10dp" android:textSize="20sp" android:textColor="#E51C23"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical" android:layout_gravity="center"> <TextView //這裡是點選事件2 android:id="@+id/frag2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="推薦" android:paddingBottom="5dp" android:paddingTop="10dp" android:textSize="20sp" android:textColor="#343434"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:layout_gravity="center" android:orientation="vertical"> <TextView //這裡是點選事件3 android:id="@+id/frag3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="同城" android:paddingBottom="5dp" android:paddingTop="10dp" android:textSize="20sp" android:textColor="#343434"/> </LinearLayout> </LinearLayout> <FrameLayout //FrameLayout載入你想要加入的Fragment android:id="@+id/frag" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>

這裡我寫了一個recyclerview讓他在不同的介面顯示不同的內容,如果有需要則用三個介面分別載入
recyclerview.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycleview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

最後是recyclerview的內容:(只有一個簡單的textview)
recycler.card:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:id="@+id/text"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp" />

</LinearLayout>

接下來是實現三個Fragment:
對應recycler_card檔案的類:
Text.java:

public class Text {

    private String text; 

    public Text(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

recyclerview的介面卡:

public class TextAdapter extends RecyclerView.Adapter<TextAdapter.ViewHolder> {

    private List<Text> textList;   //儲存Text物件的list
    private Context context;       //獲取fragment的context

    public TextAdapter(List<Text> textList,Context context) {
        this.textList = textList;
        this.context = context;
    }
    @Override
    public TextAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //傳入recyclerview的佈局檔案
        View view = LayoutInflater.from(context).inflate(R.layout.recycler_card,null,false);
        ViewHolder viewHolder = new ViewHolder(view);//為ViewHolder新增view
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(final TextAdapter.ViewHolder holder, int position) {
        /*
        * 獲取當前位置的物件
        * */
        final Text text = textList.get(position);
        /*
        * 為textview新增資料
        * */
        holder.text.setText(text.getText());
    }
    @Override
    public int getItemCount() {
        return textList.size();
    }
    static class ViewHolder extends RecyclerView.ViewHolder { //建立一個繼承RecyclerView.ViewHolder的類
        TextView text;  //佈局檔案中的控制元件
        public ViewHolder(View itemView) {
            super(itemView);
            text = (TextView) itemView.findViewById(R.id.text);
        }
    }
}

分別實現三個Fragment,這裡只給大家展示一個,其他的都一樣只是載入內容不同:
Fragment1:

public class Fragment1 extends Fragment {

    private List<Text> list = new ArrayList<>();
    private RecyclerView recycleview;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.recyclerview,container,false);//給Fragment載入介面
        init();
        recycleview = (RecyclerView) view.findViewById(R.id.recycleview);  //獲取xml檔案的recyclerview
        LinearLayoutManager manager = new LinearLayoutManager(getContext());  //給recyclerview設定線性佈局
        recycleview.setLayoutManager(manager);  //將線性佈局載入到recyclerview中
        TextAdapter adapter = new TextAdapter(list,getContext());  //設定你寫的介面卡
        recycleview.setAdapter(adapter); //載入
        return view;
    }
    //給list新增資料
    private void init() {
        Text text = new Text("頁面1");
        list.add(text);
    }
}

最後是在activity中載入三個Fragment
MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    //三個載入的fragment
    private Fragment1 fragment1;
    private Fragment2 fragment2;
    private Fragment3 fragment3;

    //三個對應的按鈕
    private TextView frag1;
    private TextView frag2;
    private TextView frag3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Montior();
        change_fragment(0);//選擇fragment
    }

    //從xml中獲取所有部件
    private void Montior() {
        frag1 = (TextView) findViewById(R.id.frag1);
        frag2 = (TextView) findViewById(R.id.frag2);
        frag3 = (TextView) findViewById(R.id.frag3);

        frag1.setOnClickListener(this);
        frag2.setOnClickListener(this);
        frag3.setOnClickListener(this);
    }

    //三個按鈕的點選事件
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.frag1:
                change_fragment(0);
                //改變點選時Textview的顏色
                frag1.setTextColor(0xffE51C23);
                frag2.setTextColor(0xff343434);
                frag3.setTextColor(0xff343434);
                break;
            case R.id.frag2:
                change_fragment(1);

                frag1.setTextColor(0xff343434);
                frag2.setTextColor(0xffE51C23);
                frag3.setTextColor(0xff343434);
                break;
            case R.id.frag3:
                change_fragment(2);

                frag1.setTextColor(0xff343434);
                frag2.setTextColor(0xff343434);
                frag3.setTextColor(0xffE51C23);
                break;
        }
    }

    private void change_fragment(int x) {
        FragmentManager manager = getSupportFragmentManager();  //初始化FragmentManager,獲取v4包所支援的fragment
        FragmentTransaction transaction = manager.beginTransaction(); //初始化FragmentTransaction
        hide_fragment(transaction);//隱藏當前fragment
        switch (x) {
            case 0:
                if(fragment1 == null) {
                    fragment1 = new Fragment1();  //如果fragment1未初始化,進行初始化
                    transaction.add(R.id.frag,fragment1); //將fragment1和對應的佈局加入棧中
                } else {  
                    transaction.show(fragment1);  //如果fragment1已經初始化,則展示
                }
                break;
            case 1:
                if(fragment2 == null) {
                    fragment2 = new Fragment2();
                    transaction.add(R.id.frag,fragment2);
                } else {
                    transaction.show(fragment2);
                }
                break;
            case 2:
                if(fragment3 == null) {
                    fragment3 = new Fragment3();
                    transaction.add(R.id.frag,fragment3);
                } else {
                    transaction.show(fragment3);
                }
                break;
        }
        transaction.commit();//之前對FragmentTransaction進行新增展示等操作,這裡呼叫commit進行提交
    }

    //如果fragment不為空則隱藏
    private void hide_fragment(FragmentTransaction transaction) {
        if(fragment1 != null) {
            transaction.hide(fragment1);
        }
        if(fragment2 != null) {
            transaction.hide(fragment2);
        }
        if(fragment3 != null) {
            transaction.hide(fragment3);
        }
    }
}

現在已經可以通過點選切換fragment了,但如果想要實現滑動效果,則還是要用到ViewPager,這裡就不給大家詳述了。


相關推薦

Activity載入Fragment實現切換頁面

在Activity上載入Fragment實現點選切換Fragment 沒有ViewPager的幫助,單憑Fragment實現滑動比較困難,這裡我就只給大家說一下如何實現點選切換。 首先是xml的佈局: activity_main.xml <Li

Fragment+RadioButton實現切換頁面效果

    首先,我們需要在主佈局檔案中activity_main.xml 放一個 容器,方便讓fragment加入進去,底部導航欄使用RedioButton切換頁面,每一個RadioButton都使用了選擇器進行圖片與字型的變化。   &nb

純html+css實現切換tab頁

核心內容是使用單選框實現css的點選事件 大致分析一下dom結構,被切換的tab頁和按鈕放在同一個li內 一共需要切換三個頁面,也就是說需要有三個li,首先寫一下基本dom結構 一、基礎結構 我使用的是VScode的軟體,可以使用快捷建立dom,就像使用css選擇器一樣的使用

切換頁面 分頁載入載入

工作日誌  隨手筆記 僅供參考       一 頁面一開始載入的時候就提前載入頁面出來 然後下載滾動的時候 每次載入10個  然後判斷介面返回的資料 的長度 當長度小於10 的時候 表示沒有更多的資料 停止下拉載入

使用css實現切換效果

首先先製作一個容器,用來容納所顯示的內容: HTML程式碼: <html></html> <head> <meta charset="utf-8"

Android ViewPager實現滑動切換頁面+底部tab切換頁面(類微信首頁)

目錄:1.實現功能概述2.程式碼實現 1.實現功能概述實現了滑動更換頁面同時切換底部Tab的圖示、文字的顏色,同時也支援點選底部Tab達到切換頁面的效果,有點類似微信首頁佈局 外帶實現toolbar overflow選單顯示圖示。 2.程式碼實現 2.1 效果截圖(資源來源

用js給div繫結事件,實現切換效果的幾種方式總結

用js給div繫結事件,實現點選切換效果,總結有如下幾種方式 script type="text/javascript"> function btnAction() { var titleNValue = document.getElementBy

純css實現切換樣式

原理: 利用 a偽類選擇器,focus。(獲得焦點設定樣式,失去焦點恢復樣式)注意: active 和 focus的區別,active是點選 a標籤時(從滑鼠按下開始 到滑鼠擡起結束。)        focus是獲得焦點,與失去焦點時觸發相應的樣式示例demo: <s

RecyclerView實現切換

1.定義全域性的布林值 boolean b=false;//實現通過判斷切換 2.實現三個檢視  <LinearLayout android:id="@+id/li" android:layout_width="match_parent" android:la

js實現切換文字

點選實現文字的切換,通常用在商品的收藏<p id="btn" onclick="changeVal(this);" >展開</p><script>    function changeVal(obj){    var val=documen

用錨anchor和location.reload 實現重新整理頁面並同時跳轉到本頁面指定位置

群裡看到“如何實現點選重新整理頁面並同時跳轉到本頁面指定位置”這麼一個提問,於是抽空寫了個demo,做了個簡單實現,供大家參考。這裡有2個要求: 1)要重新整理頁面 2)跳轉到頁面指定位置 如果我們簡單用a標籤name屬性,錨點(anchor)來處理的話,只能實現跳轉到頁面指定位置,而不能重

PullToRefreshListView拉和下拉+輪播圖多條目+fragment巢狀fragment+二次取樣+側拉切換fragment+PullToRefreshGritView圖片展示

側拉 程式碼 1提取的基類 1.1Activity的基類 package com.example.zonghelianxi02.ui.activity; import android.os.Bundle; import android.support.annotation.Nulla

activity被回收後,Tab無法切換fragment

1、原因:當activity在後臺並且記憶體不足時,系統會把activity給回收掉,但也會儲存部分(不是全部)資訊用於下次頁面恢復。這樣會導致下次進入頁面後佈局或資料錯亂,並且點選底部Tab無法切換fragment。 2、解決方法: (1)方法一:註釋掉sup

Android 安卓 fragment+viewpager 仿qq介面 實現選單切換介面+滑動切換viewpager切換介面

原始碼地址 http://download.csdn.net/detail/zhangjm_123/7902245 最近寫了一個fragment+viewpager仿qq的app,先上圖                   如圖,介面底部有四個textview,分別

Android 通過ViewPager實現和滑動切換Fragment標籤頁

      如上圖效果,要切換 Fragment 標籤頁,可以通過點選標籤或者滑動標籤頁來實現。 網上應該有封裝好的開源庫可以直接利用,不過這裡介紹一下自己通過 ViewPager 實現該效果。 首先是佈局檔案: <?xml version="1.0" encodi

ViewPager+Fragment支援導航滑動以及切換,觸發替換某個tab對應的fragment

每天積累一點點,時間久了,你就是大牛了     最近專案中要改造首頁導航欄,框架是用ViewPager+Fragment做的。導航欄中有一項fragment不固定,進入首頁前如果伺服器資料訪問到了並且傳進來了就會指明要展示的fragment。如果沒有訪問

jq實現載入更多分頁功能

頁面上實現類似於下拉載入更多的功能,這種是點選載入更多 。 大致思路是: 首先Ajax獲取到下一頁內容,返回json格式資料,如果是跨域請求可以用jsonp返回,通過jq的append()到某個元素後面 此時分頁的page+1,可以在“載入更多”按鈕上把總頁數和當前

音樂網站開發:實現按鈕切換頁面背景圖的功能

        最近這一星期在做一個簡單小型的音樂播放器網站,目前各種功能基本都已經實現,包括切換上一曲下一曲,播放與暫停,隨機播放單曲迴圈順序播放模式切換,一首播放完畢自動按模式切換至下一曲,載入單句歌詞及所有歌詞等功能。另外就是本篇部落格要介紹的功能了,點

layui的流載入切換載入內容,需要多次flow.load,page混亂解決方案

layui的流載入,如果需要點選切換流載入的內容,同時寫多個flow.load會導致多次呼叫flow導致整體page混亂 解決方案如下: html: <div class="model-list"> <ul id="LAY_demo1" style="

原生js實現滑鼠切換效果

今天之所以寫一篇關於js的程式碼實現,一方面是因為個人習慣用jquery編寫程式碼,另一方面是因為github這個大平臺拋棄了jquery。 Jquery是一個js庫,極大簡化js程式設計,使用方便,相容性好,這篇文章就以一個例子來說明jq和js的編寫差別。 首先我們看一下效果圖: