1. 程式人生 > >TabLayout+ViewPager中Fragment 複用為什麼只出來一條資料?

TabLayout+ViewPager中Fragment 複用為什麼只出來一條資料?

思路:     

        首先這個介面有兩種甚至三種方式是可以實現的,下面讓我來為大家講講我的思路,希望大家不要覺得我太廢話了,嘿嘿,其實我在現實生活中就是一個,外向,陽光,積極向上喜歡說話交好朋友的女孩,興趣愛好更是數不勝數,但是做了敲程式碼的奴隸後我就很少有時間去做自己喜歡的事情,雖然是這樣吧!但是一天也過得十分充實,苦中作樂,每天也在吸收新的知識,更是有manny拿何樂而不為呢?嘿嘿。。。

              第一種呢?就是普遍情況下大家一遇到一個介面有多條Item顯示不同或相同資料那麼他就會想到"多佈局"這個關鍵字還都是讓大部分的人都提在嘴邊的呢,因為他不僅能實現你介面的效果,而且還能解決你的滑動衝突這不是很方便嘛!嗯,當然這是它的一大優點,但要我來說這並不是一個很好的解決的辦法,那麼這就有人問了這麼好用為什麼又不推薦“多佈局”的使用呢?那麼我來告訴你,如果我要用網路請求解析資料一個介面有50條不同的佈局不同的資料解析資料出來,那麼你是不是要有50個xml佈局呢?當然肯定不是了,所以呀“多佈局”只適用於固定的Item資料,簡單來說它不能靈活著使用,這就是使用“多佈局”的缺點。

               第二種呢?簡單說因為自己還沒有嘗試過,有朋友提到過,用到一個控制元件,嗯,就是一個控制元件,就這樣吧。。。。。。

            第三種呢?也就是我這個專案的下面的其中一個介面所做出來的效果了,我採用的是TabLayout+ViewPager中的Fragment複用,優點是有多少資料我就複用多少資料出來,但今天遇到了一個小問題就是資料只顯示了第一條Item資料,這又是為什麼呢,待會下面為大家講解,請前往佳姝的獨木橋。。。。。。。。。。。。

1.課節標籤圖片展示

 佳姝1:在MainActivity中

public class MainActivity extends AppCompatActivity {
 
private Toolbar mToolbar;
private ImageView mimg_wenhao;
private RecyclerView mRecyclView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     initView();
     initData();

}

private void initData() {
    initChuyiKeCheng();
    initChuyiTab();
    persons.add(new Person("初一",chuyiTitle,keCheng));
    persons.add(new Person("初二",chuyiTitle,keCheng));
    persons.add(new Person("特殊名稱的...班",chuyiTitle,keCheng));
    //多佈局顯示介面卡
   /* Recycl_Wai recycl_wai = new Recycl_Wai(persons, MainActivity.this, getSupportFragmentManager());
    mRecyclView.setAdapter(recycl_wai);*/
    //單佈局Fragment複用顯示介面卡
      Recycl_Er recycl_Er = new Recycl_Er(persons, MainActivity.this, getSupportFragmentManager());
      mRecyclView.setAdapter(recycl_Er);

}
private void initView() {
    mToolbar = (Toolbar) findViewById(R.id.mToolbar);
    mimg_wenhao = (ImageView) findViewById(R.id.mimg_wenhao);
    mRecyclView = (RecyclerView) findViewById(R.id.RecyclView);
    mRecyclView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
}

佳姝2:自定義類繼承RecyclView類

在RecyclView介面卡的 onBindViewHolder()繫結檢視的方法裡標記紅色字型就是我解決今天標題的重點

解決:給每個複用的ViewPager裡的Fragment都讓它索引+1,避免重複使用同一個xml佈局這樣ID就不會是同一個ID也不會只出現一條ViewPager中的Fragment資料。

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    fragmentList = new ArrayList<>();
    holder.mclasses.setText(persons.get(position).getTitle());
    //todo 給Viewpager重新設定一個Id,避免重複使用同一個xml佈局id只顯示一條資料
    holder.mViewpager.setId(position+1);
    chuyiTitle = persons.get(position).getChuyiTitle();
    //Fragment複用
    for (int i = 0; i < chuyiTitle.size(); i++) {
        TwoFragment twoFragment = new TwoFragment();
        Bundle bundle = new Bundle();
        //使用Bundle傳類序列化介面
        bundle.putSerializable("aa", persons.get(position));
        twoFragment.setArguments(bundle);
        fragmentList.add(twoFragment);
    }
    FVPAdapter fvpAdapter = new FVPAdapter(fragmentManager, chuyiTitle, fragmentList);
    holder.mViewpager.setAdapter(fvpAdapter);
    //todo 預載入,點選TabLayout後幾個Item條目時自動儲存前面選中的資料
    holder.mViewpager.setOffscreenPageLimit(fragmentList.size());
    Log.e("TAG", fragmentList.size()+"" );

}

 佳姝3:接下來就是Fragment顯示ViewPager中的資料咯!

private void initData() {
    //資料集合獲取
    kecheng = bb.getKecheng();
    //設定RecyclView的GridView檢視,顯示資料,並回調介面實現點選未選中與選中狀態
    Recyc_Grid recyc_grid = new Recyc_Grid(kecheng,getActivity());
    mrecycl_two.setAdapter(recyc_grid);
    recyc_grid.setMyCallBack(new Recyc_Grid.MyCallBack() {
        @Override
        public void getData(View view,int id) {
            LinearLayout viewById = view.findViewById(R.id.mll);
            TextView classesName = view.findViewById(R.id.mClassesName);
            TextView techer = view.findViewById(R.id.mTecher);
            boolean isselect = kecheng.get(id).isIsselect();
            kecheng.get(id).setIsselect(!isselect);
            if(isselect){
                viewById.setBackgroundResource(R.drawable.shape_two);
                classesName.setTextColor(R.drawable.shape_two);
                techer.setTextColor(R.drawable.shape_two);

            }else {
                viewById.setBackgroundResource(R.drawable.shape_one);
                classesName.setTextColor(R.drawable.shape_two);
                techer.setTextColor(R.drawable.shape_two);

            }
        }
    });
}

 喜歡我的,加我關注哦(⊙o⊙),不喜歡可以給建議但還是別噴了,嘿嘿。。。。

相關推薦

TabLayout+ViewPagerFragment 為什麼出來資料

思路:              首先這個介面有兩種甚至三種方式是可以實現的,下面讓我來為大家講講我的思路,希望大家不要覺得我太廢話了,嘿嘿,其實我在現實生活中就是一個,外向,陽光,積極向上喜歡說話交好朋友的女孩,興趣愛好更是數不勝數,但是做了敲程式碼的奴隸後我就很少有時間

oracle根據時間獲取最新的資料

1、select kd.CREATEUSERID as userid,kd.LOCATION,kd.createtime as location from KT_DEVICESTRACK kd where rownum=1 order by kd.createtime 2、SELECT *

Oracle刪除重複記錄保留資料的幾種方法

1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷 SELECT * FROM people WHERE peopleid IN ( SELECT peopleid FROM people GROUP BY peopleid

MySQL查詢今天的資料,有則顯示,若沒有則查詢昨天的,顯示資料

select * from ( select t.pc_code, t.pc_name, t.pc_date, rownum row_num from TEST_PC_FUND_INFO t

解決mysql資料重複問題-保留資料

<pre name="code" class="html">1.sql語句,原理使用臨時表法,效率比較低 delete FROM `source` WHERE is_deleted=0 AND (student_id,score_id

Mybatis 返回資料的解決方案 之association、collection

:[StudentC{sid=14, sname='null', sage=null, saddress='null', classS=ClassS{id=345345345, className='二班', studentId=null, students=null}}, StudentC{sid=15,

oracle 查詢重複資料並且刪除, 保留資料的SQL語句

delete from t_account where feedate in (   select feedate           from t_account   group by feeda

RecyclerView巢狀ListView 顯示資料

 今天做專案發現  RecyclerView巢狀ListView 只顯示一個item, 咋辦! 此時我們需要把ListView重寫一下onMeasure方法。因為當ListView的Item每次改變時都會呼叫onMeasure. 自定義ListView就可以 了 publ

oracle刪除重複資料資料

--worked well。可以刪除重複記錄,對於多個欄位也是一樣的原理  delete from T_USER  where id in (select id from T_USER group b

sql查詢每組的最後資料

學號        分數                     測試時間 1               70              2011-10-21 20:21:32 1              85                2011-12-10 10:

oracle 獲取資料

SELECT * FROM ( SELECT PI.INDEXCODE  FROM PLA_WARNING_CONFIG PWC  LEFT JOIN PLA_INDEXCONTENT PI    O

mybatis一對多關聯查詢子表返回資料

注意:在mybatis的部分版本中發現當兩個表的主鍵列名一致,比如都是id時,配置關聯查詢時子表只能返回1條資料,在這裡提供一種簡單的方法,避免大量修改檔案,由於我的原始碼不便公開,請大家看這裡的原始碼:http://blog.csdn.net/qinshijangshan/

RecyclerView 多資料顯示資料

解決過程: 首先檢查資料是否錯誤,通過在RecyclerView.Adapter<T>#getItemCount 中 列印對應資料的 size 發現數據個數正常,排出資料本身的問題;那麼

【Android】recyclerView無資料顯示資料

RecyclerView相比ListView,優化了許多,但是有許多要注意的地方。1.首先可能出現的情況是,recyclerView無資料展示。可能由如下原因導致:①getItemCount()方法要返回arrayList的長度,不能返回0.②要對recyclerView設定

listView拓展的時候出現的拓展頁面顯示不全解決方法(顯示資料

自定義listView ,重寫onMeasure 方法 @Override protected void onMeasure(int widthMeasureSpec, int heightMeas

TabLayout+ViewPager更新fragment的ui數據

back ges tool layout handler tle tex bindview bing 先看下這樣一段代碼 private String titles[] = new String[]{"今天", "這周", "這月", "今年"}; bool

MVPPresenter的思考

MVP模式早已經不是什麼新鮮詞了,這裡不再贅述。最近在重構程式碼的過程中,發現了一件及其痛苦的事情:很多時候,model層在應用中是很薄的,大多數的業務邏輯都在Presenter層,但是由於模版 程式碼,Activity(View)->P是一一對應繫結的關

fragment至EventBus多次呼叫

專案是mvp模式開發的,中間有一個tablayout,每個標籤都是fragment複用,通過model請求不同資料展示,發現一個問題,多次滑動之後,每個fragment最後都顯示同一個內容,看起來好像fragment複用有問題,每次取得是同一個fragment。

Fragment(僅限自己使用)

@Override public void newTitleSuccess(HttpNewsTitle httpNewsTitle) { list = httpNewsTitle.getNewsChannelList(); for (

python開發過程總結

爬蟲在開發過程中也有很多複用的過程,這裡總結一下,以後也能省些事情。1、基本抓取網頁get方法post方法2、使用代理IP在開發爬蟲過程中經常會遇到IP被封掉的情況,這時就需要用到代理IP;在urllib2包中有ProxyHandler類,通過此類可以設定代理訪問網頁。3、C