Fragment複用
阿新 • • 發佈:2019-02-05
適合tablayout多個選擇按鈕時使用 只用建立一個fragment
我儘量把步驟寫詳細些 應該不難理解
依賴
//TabLayout元件
implementation 'com.android.support:design:28+'
佈局
<android.support.design.widget.TabLayout android:id="@+id/mTab" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/mViewPager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager>
建一個實體類
//用來存放tablayout的名字和url(一般每切換一個都要換頁面內容 所以每建立一個就分配一個url用來網路請求 也可以傳其他值 )
package com.example.lin.myservice.reuse; public class ReuseEntity { private String name; private String type; public ReuseEntity(String name, String type) { this.name = name; this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
在Activity裡建立兩個Arraylist集合
//用來存放fragment
private ArrayList<Fragment> mFragment = new ArrayList<>();
//用來存放tablayout的名字和url(一般每切換一個都要換頁面內容 所以每建立一個就分配一個url用來網路請求 也可以傳其他值 )
private ArrayList<ReuseEntity> mTitle = new ArrayList<>();
把需要傳入的tablayout的名字和url存入mTitle集合中
如果是網路獲取的值可以for迴圈新增 結果一樣(這裡只存三個值舉個例子:實在是懶得找網址了,就隨便拉了幾個句子傳過去顯示吧)
mTitle.add(new ReuseEntity("奧特曼", "奧特曼的職責是消滅小怪獸"));
mTitle.add(new ReuseEntity("小怪獸", "我們都是小怪獸,早晚會被正義的奧特曼殺死"));
mTitle.add(new ReuseEntity("路明非", "不要死"));
然後新建一個fragment
- 建立時 Include fragment factory methods?和Include interface callbacks? 這兩個要選中的
- onCreateView方法後邊的全刪掉不用 前邊報錯的也刪掉 暫時用不上
好了 先放一邊 回到Activity for迴圈把url傳入fragment 一般可以傳兩個String值的 這邊因為只用了一個 後邊就只傳了一個空
for (int i = 0; i < mTitle.size(); i++) {
mFragment.add(BlankFragment.newInstance(mTitle.get(i).getType(),""));
}
都儲存完了 接下來寫介面卡
package com.example.lin.myservice.reuse;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
public class ReuseAdapter extends FragmentPagerAdapter {
private ArrayList<ReuseEntity> mTitle;
private ArrayList<Fragment> mFragment;
public ReuseAdapter(FragmentManager fm, ArrayList<ReuseEntity> mTitle, ArrayList<Fragment> mFragment) {
super(fm);
this.mTitle = mTitle;
this.mFragment = mFragment;
}
@Override
public Fragment getItem(int i) {
return mFragment.get(i);
}
@Override
public int getCount() {
return mFragment.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mTitle.get(position).getName();
}
}
然後呼叫介面卡 繫結viewpager
ReuseAdapter adapter = new ReuseAdapter(getSupportFragmentManager(), mTitle, mFragment);
mViewPager.setAdapter(adapter);
//設定可以滑動
mTab.setTabMode(TabLayout.MODE_SCROLLABLE);
mTab.setupWithViewPager(mViewPager);
再回到fragment處理髮送過來的資料 給佈局加個id一會用來顯示傳過來的值
<TextView
android:id="@+id/mName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
傳過來的值就儲存在mParam1和mParam2中 因為只傳了一個 所以就把mParam1的值賦給TextView
mName.setText(mParam1);
由於網路不好就不發完成圖了 收工收工 溜了溜了