Android_AutoRoom 4
Android_AutoRoomApp4
下拉切換(效率更高) + 資料更新 + 下拉重新整理 + RadioButton的圖片設定(美化)
難點:資料更新
下拉切換
第一次是自己通過迴圈來實現,效率很低。
問題
- new 和 直接賦值 的區別
直接賦值是賦值地址過去,假如a,b指向*同一個資料的記憶體地址,那麼清除b*,記憶體地址的資料也會被清楚,即a也會為空
List<String> a = new List<>(); List<String> b = a; a == b is true; List<String> c = new List<>(); c.addAll(a); a == c is false; // 結論 a = b = 6; if clear(b); then a == null;
後來與伺服器端約定好,傳遞相應的格式的json解決
經過格式的轉換後,效率能夠得到提升
// 下拉框選項 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // position後期進行資料更新是需要 floorPosition = position; // 解決指向同一地址的問題 classroomBeanList.removeAll(classroomBeanList); // 該list為傳遞過來的資料 tempList = buildingBean.getFloor().get(position); // 替換recyclerview中的資料 classroomBeanList.addAll(tempList); // 通知佈局進行更新 adapter.notifyDataSetChanged(); } @Override public void onNothingSelected(AdapterView<?> parent) { } });
資料更新
問題:
什麼時候進行資料更新?
主動重新整理的時候(下滑重新整理)
- 退出去當前頁面的時候,即執行onstart()方法更新資料
資料如何儲存?
這裡花了很長的時間想了如何使用資料庫來儲存,但是還是有問題,後來換種想法使用sp來進行更新
其實有的時候這個方法不行外面可以換種方法來解決同一個問題。總之,我們得相信
方法總比困難多
* 儲存到資料庫(有一定困難,棄用。使用[litepal](https://github.com/LitePalFramework/LitePal)但是存在問題,暫時不用) * 儲存到sp(選用這個)
實現
- 在
MainPagerActivity
中重寫onStart
, 再次傳送請求
- 在
@Override public void onStart() { Log.d(TAG, "onStart: onStart ~"); super.onStart(); // 1. 獲取賬號和密碼, 是為了能夠再次進行請求 String usernameAndPassword = SPUtil.getInfoFromLocal(mContext,Constant.USERNAMEANDPASSWORD); username = usernameAndPassword.split(",")[0]; password = usernameAndPassword.split(",")[1]; // 2. 重新請求資料,並儲存 rePost(); } public void rePost(){ Log.d(TAG, "rePost: 重新載入 。。。"); OkHttpUtils .post() .url(Constant.URLLOGIN) .addParams("username", username) .addParams("password", password) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.d(TAG, "onError: "); Toast.makeText(mContext,"網路異常,請稍後再試",Toast.LENGTH_SHORT).show(); return; } @Override public void onResponse(String response, int id) { Log.d(TAG, "onResponse: " + response); try { JSONObject jsonObject = new JSONObject(response); String result = jsonObject.getString("result"); Log.d(TAG, "onResponse: "+ response); if (result.equals("1")) { SPUtil.saveInfoToLocal(mContext,response,Constant.BUILDINGJSON); Total total = JSONUtils.parseTotalJSON(response); buildingList = total.getBuilding(); } else { String message = jsonObject.getString("message"); Toast.makeText(mContext, message,Toast.LENGTH_SHORT).show(); return; } } catch (JSONException e) { e.printStackTrace(); } } }); }
下拉重新整理
使用官方的下來重新整理:SwipeRefreshLayout
使用方法(很簡單)
- 獲取id
- 設定顏色方案
- 設定重新整理事件
setOnRefreshListener
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl_class_room" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_class_room" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout>
java程式碼
// xia hua shua xin
srl_class_room.setProgressBackgroundColorSchemeResource(android.R.color.white);
srl_class_room.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);
srl_class_room.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
srl_class_room.setRefreshing(true);
new Thread(new Runnable() {
@Override
public void run() {
// 獲取新資料
reFresh();
// rePost();
}
}).start();
}
});
RadioButton圖片大小設定
- 設定一個選擇器(
selector_main_pager.xml
),把圖片放進去 - 然後在java程式碼中獲取資源,設定大小
- 設定一個選擇器(
selector_main_pager.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/home" />
<item android:state_checked="false" android:drawable="@mipmap/home" />
</selector>
在使用該RadionButton的佈局中使用如下程式碼
// 使用上面的選擇器
Drawable drawable_Pager = getResources().getDrawable(R.drawable.selector_main_pager);
drawable_Pager.setBounds(0,0,70,70);
rg_main_pager.setCompoundDrawables(null,drawable_Pager,null,null);
遇見問題
- 記憶體溢位: 暫時少見,等下次出現解決
載入過多的資料時候的確會出現記憶體溢位問題,應該是item載入太多圖片導致,等待解決中…
- 記憶體溢位: 暫時少見,等下次出現解決
- 資料更新: litepal對於List是否支援?
擴充套件:
相關文章
- ●類化意識●4解4連環(4)
- 4.RabbitMQ 4種交換模式MQ模式
- search(4)- elastic4s-ElasticDslAST
- 4-4 Redis 的常用配置Redis
- 4_4雙棧佇列佇列
- Internet Protocol version 4 (IPv4)Protocol
- webpack4+react16+react-router4WebReact
- jQuery使用總結-CorejQuery其他4/4jQuery
- 2024年4月4號
- 機器學習-4機器學習
- ASM (4)ASM
- junit 4
- 4/23
- 4/24
- 4、NAT
- 4 7
- 4/7
- 4/9
- 4 11
- English 4
- Day 4
- java(4)Java
- .NET Framework 4 和 .NET Framework 4 Client ProfileFrameworkclient
- 使用Identity Server 4建立Authorization Server (4)IDEServer
- JF +Spring 4 +JUNIT4 測試?Spring
- rhel 4 update4 的核心版本號
- (biwidth*biBitCount/8+3)/4*4
- slf4j-api、slf4j-log4j12以及log4j之間什麼關係?API
- Spring4學習(四)Spring4中整合Hibernate4Spring
- 即將推出的CSS4 Level 4 Selectors(第4級選擇器)CSS
- 密碼管理器進化史(4/4)密碼
- ●類化意識●4解4連環(5)
- ●類化意識●4解4連環(6)
- ●類化意識●4解4連環(7)
- ●類化意識●4解4連環(8)
- 4月4日網站變灰實錄網站
- ●類化意識●4解4連環(1)
- ●類化意識●4解4連環(2)