Android零散

来源:http://www.cnblogs.com/everhad/archive/2016/03/13/5274236.html
-Advertisement-
Play Games

要實現分組列表這樣的效果:點擊ListView中的分組名稱,即展開此分組顯示其包含的項目。使用ExpandableList可以實現展開這樣的效果,如果對於列表中的每個可點擊的標題View需要更多的定製,而不是簡單的展開——例如點擊全選等,那麼可使用ListView嵌套GridView組合實現,Lis


2016-03-13

Android零散

ListView中嵌套GridView

要實現分組列表這樣的效果:點擊ListView中的分組名稱,即展開此分組顯示其包含的項目。
使用ExpandableList可以實現展開這樣的效果,如果對於列表中的每個可點擊的標題View需要更多的定製,而不是簡單的展開——例如點擊全選等,那麼可使用ListView嵌套GridView組合實現,ListView中嵌套的GridView應該是完全展開的——內外層都滑動的交互體驗很彆扭,而且實現起來麻煩。而對應的GridView可以使用setVisibility為GONE、VISIBLE這樣的方式進行暫時的隱藏和打開。
為了使GridView在ListView中完全展開,那麼它的height應該是個具體的數值,這裡讓GridView始終保持其內容的高度即可:

public class UnfoldGridView extends GridView {
public UnfoldGridView(Context context) {
super(context);
}

public UnfoldGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public UnfoldGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = View.MeasureSpec.makeMeasureSpec(900000, View.MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}

makeMeasureSpec中給一個很大的size,然後使用AtMost使其保持夠大即可。

setAdapter和addHeaderView、addFooterView

可以使用addHeaderView和addFooterView來為ListView添加首尾的個性視圖。兩者都可以多次調用來添加多個header和footer。
這兩個方法需要註意和setAdapter的調用順序:

When first introduced, this method could only be called before setting the adapter with setAdapter(ListAdapter). Starting with KITKAT, this method may be called at any time. If the ListView's adapter does not extend HeaderViewListAdapter, it will be wrapped with a supporting instance of WrapperListAdapter.

所以,為了保持相容性,無論是在API 19之前或之後,保持addHeaderView和addFooterView在setAdapter之前執行。addHeaderView如果在setAdapter之後執行,那麼在API 19之前的版本直接回報錯。而addFooterView在setAdapter之後執行的話,雖然不引起運行時錯誤——但是更迷惑的是——添加的視圖是看不到了。
這個是和API Level相關的一個問題,算是谷歌的坑吧。

ListView的getItemViewType

一個頁面中當要連續顯示多個不同的列表時,或者間隔性地顯示多種不同的View時,需要用到ListView的兩個方法:

@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}

getItemViewType方法需要註意的是,其定義的ITEM_XX這樣的整數常量,其取值範圍需要在0~getViewTypeCount()-1之間,下麵是getItemViewType返回值的描述:

An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView. Note: Integers must be in the range 0 to getViewTypeCount - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.

在區間外的viewType值,會引起運行時的indexoutofboundexception錯誤,這個是ListView自身的限制。

startActivityForResult和活動的launchMode

Activity_A啟動Activity_B後,需要Activity_B在完成操作後返回的一些數據:

//Activity_A中
private final int REQUEST_CODE_EDIT_ITEM = 2;
public void startPageBForEdit() {
Intent start = new Intent(this, EditActivity.class);
startActivityForResult(start, REQUEST_CODE_EDIT_ITEM);
}
//Activity_B中
public void setResult() {
Intent data = new Intent();
data.putExtra("itemDelete", true);
setResult(RESULT_OK, data);
}

在Activity_A中接收數據:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_EDIT_ITEM && resultCode == RESULT_OK) {
//成功返回結果了
}
}

上面是典型的代碼片段,需要註意的是:對於對應的目標Activity啟動模式(在manifest中)指定為singleTask和singleInstance的Activity,使用startActivityForResult後,當前Activity的onActivityResult會立即執行,其resultCode為RESULT_CANCEL,並且data為null.
這個從啟動模式的設計上就可以理解,假設依次打開了A、B兩個Activity,其中A指定為singleTask,那麼在B中使用startActivityForResult打開A顯然是沒有意義的,因為B會從活動棧出棧,直接被destroy了。
所以,只有standard和singleTop這樣的啟動模式的Activity,使用startActivityForResult打開它們才可以有效的返回數據給上一個Activity,如果遇到這樣的需求,需要設計好多個Activity之間的跳轉關係。傳遞數據的方式是很多的。

Service的onStartCommand的返回值

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}

onStartCommand中的flags和其返回值都和Service的啟動緊密相關。Service的定位就像是沒有View的Activity,應用長期後臺的情況下Service可能會暫時性被殺死(隨著進程被殺死)——之後又會再次被系統啟動。
每次調用startService來執行一些動作時,onStartCommand被執行,其intent參數代表分發過來的意圖描述數據(intnt就是一個攜帶有關“要做什麼”的信息對象)。
使用startService來啟動一個已經運行中的,正在啟動中的,重新啟動中的Service時,系統會在這些不同的Service狀態下對onStartCommand的調用產生一些差異。
//待續。。。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <!DOCTYPE> 聲明不是 HTML 標簽;它是指示 web 瀏覽器關於頁面使用哪個 HTML 版本進行編寫的指令。 在 HTML 4.01 中,<!DOCTYPE> 聲明引用 DTD,因為 HTML 4.01 基於 SGML。DTD 規定了標記語言的規則,這樣瀏覽器才能正確地呈現內容。 HTM
  • /* 01 HTTP請求 */ 重點:1.超文本傳輸協議. 2.http請求過程. {     1> http協議: 超文本傳輸協議(Hypertext Transfer Protocol)     {         http協議規定了客戶端和伺服器之間的數據傳輸格式.           
  • HTML元素的ID和Name屬性的區別今天突然興緻來了,想深究下這兩屬性的具體區別最classical的答案:ID就像是一個人的身份證號碼,而Name就像是他的名字,ID顯然是唯一的,而Name是可以重覆的。      顯然這個ID和Name的解答說的太籠統了,當然那個解釋對於ID來說是完全對的,它
  • Some Structure About CSS Layout Position,Layer[層次] Box Model Visual Formatting Model BFC[block formatting content],IFC[inline formatting content] Styl...
  • 仍記得剛來到公司的時候,老大跟我們說起原型鏈、閉包、MV*之類的東西,當時真的是一臉懵逼的樣子啊哈哈 在公司做前端開發也差不多四個月了,每一天感覺都是很忙碌,都是忙著寫業務代碼或者自己在學習新東西,總感覺很多知識點在這樣的狀態下,匆匆忙忙就略過了,自己並沒有真正理解掌握下來,還是要趁有時間還是把那些
  • jquery通過ajax方法獲取json數據不執行success回調方法
  • 原文地址:http://onevcat.com/2013/05/talk-about-warning/   一個有節操的程式員會在乎自己的代碼的警告,就像在乎飯碗邊上有隻死蟑螂那樣。 ——@onevcat 現在編譯器有時候會很吵,而編譯器給出的警告對開發者來說是很有用的信息。警告不會阻止繼續編譯和鏈
  • 先看效果: 京東商城底部菜單欄      新浪微博底部菜單欄   本次學習效果圖: 第一,主佈局文件(啟動頁main.xml,位於res/layout目錄下)代碼 第二,創建顯示此TabWidget的佈局tabmini.xml(位於res/layout目錄下) 第三,在drawable裡面創建一個s
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...