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+ViewPager中Fragment 複用為什麼只出來一條資料?
思路: 首先這個介面有兩種甚至三種方式是可以實現的,下面讓我來為大家講講我的思路,希望大家不要覺得我太廢話了,嘿嘿,其實我在現實生活中就是一個,外向,陽光,積極向上喜歡說話交好朋友的女孩,興趣愛好更是數不勝數,但是做了敲程式碼的奴隸後我就很少有時間
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
MVP中Presenter複用的思考
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