當前位置:首頁 » 安卓系統 » android方法重載

android方法重載

發布時間: 2022-11-13 20:54:39

1. android程序中,選項菜單無法橫向排列

菜單Memu是用戶界面中最常見的元素之一,使用非常頻繁,在Android中,菜單被分為如下三種,選項菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu),以下說的是創建OptionsMenu

一、menu的常用API
public boolean onCreateOptionsMenu(Menu menu):使用此方法調用OptionsMenu。
public boolean onOptionsItemSelected(MenuItem item):選中菜單項後發生的動作。
public void onOptionsMenuClosed(Menu menu):菜單關閉後發生的動作。
public boolean onPrepareOptionsMenu(Menu menu):選項菜單顯示之前onPrepareOptionsMenu方法會被調用,你可以用此方法來根據打當時的情況調整菜單。
public boolean onMenuOpened(int featureId, Menu menu):單打開後發生的動作。

二、Menu默認Sytel
默認樣式是在屏幕底部彈出一個菜單,這個菜單我們就叫他選項菜單OptionsMenu,一般情況下,選項菜單最多顯示2排每排3個菜單項,這些菜單項有文字有圖標,也被稱作Icon Menus,如果多於6項,從第六項開始會被隱藏,在第六項會出現一個More里,點擊More才出現第六項以及以後的菜單項,這些菜單項也被稱作Expanded Menus。下面介紹。
1.main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="請點擊 Menu鍵顯示選項菜單"
android:id="@+id/TextView02" />
</LinearLayout>

2.重載onCreateOptionsMenu(Menu menu)方法
重載onCreateOptionsMenu(Menu menu)方法,並在此方法中添加菜單項,最後返回true,如果false,菜單則不會顯示。

3.為菜單項注冊事件
使用onOptionsItemSelected(MenuItem item)方法為菜單項注冊事件
public boolean onOptionsItemSelected(MenuItem item)

2. Android問題:自定義ViewGroup,重載computeScroll()方法有什麼用

為了易於控制滑屏控制,Android框架提供了computeScroll()方法去控制這個流程。在繪制View時,會在draw()過程調用該


方法。因此,再配合使用Scroller實例,我們就可以獲得當前應該的偏移坐標,手動使View/ViewGroup偏移至該處。

computeScroll()方法原型如下,該方法位於ViewGroup.java類中

/**
*
*andmScrollYifnecessary.
*animatingascrollusinga{@linkandroid.widget.ScrollerScroller}
*object.
*/由父視圖調用用來請求子視圖根據偏移值mScrollX,mScrollY重新繪制
publicvoidcomputeScroll(){//空方法,自定義ViewGroup必須實現方法體

}

為了實現偏移控制,一般自定義View/ViewGroup都需要重載該方法

3. android開發中的override/implement methods

override/implement methods 是尋找 重載的方法,就是它的父類或者 它的介面 有的方法 ,一般都是一個完整的方法 比如: public void onCreate(){ },
而setOnClickListener() 只是一個控制項對象的方法,需要一個對象去調用它 比如 button.setOnClickListener()
這兩個是不同的
不太好說,你慢慢就會理解的

4. android中怎麼調用Abstract修飾的方法

構造方法是一種特殊的方法,它是一個與類同名且沒有返回值類型的方法。對象的創建就是通過構造方法來完成,其功能主要是完成對象的初始化。當類實例化一個對象時會自動調用構造方法。構造方法和其他方法一樣也可以重載。

在Java中,任何變數在被使用前都必須先設置初值.Java提供了為類的成員變數賦初值的專門方法。構造方法是一種特殊的成員方法,它的特殊性反映在如下幾個方面:
1.構造方法作用:(1).構造出來一個類的實例 (2).對構造出來個一個類的實例(對象)初始化。
2.構造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有。
3.主要完成對象的初始化工作,構造方法的調用是在創建一個對象時使用new操作進行的。
4.類中必定有構造方法,若不寫,系統自動添加無參構造方法。介面不允許被實例化,所以介面中沒有構造方法。
5.不能被static、final、synchronized、abstract和native修飾。
6.構造方法在初始化對象時自動執行,一般不能顯式地直接調用.當同一個類存在多個構造方法時,java編譯系統會自動按照初始化時最後面括弧的參數個數以及參數類型來自動一一對應。完成構造函數的調用。
7.構造方法分為兩種:無參構造方法 有參構造方法
構造方法可以被重載。沒有參數的構造方法稱為默認構造方法,與一般的方法一樣,構造方法可以進行任何活動,但是經常將他設計為進行各種初始化活動,比如初始化對象的屬性。
8.構造代碼塊:
(1)作用:給對象進行初始化,對象一建立就執行,而且優先於構造函數執行
(2)構造代碼塊和構造函數的區別:
構造代碼塊是給所有不同對象的共性進行統一初始化,構造函數是給對應的對象進行初始化

5. android 開發onuserleavehint是什麼方法

這個方法是當用戶點擊或者長按Home鍵的時候觸發的,在Activity中可以重載的。希望能幫到您。

6. 在Android開發中怎樣使用Application類

例:CustomApplication.java
1、新建CustomApplication繼承Application類
2、重載onCreate()方法
3、在mainfest文件中的application標簽中指定name屬性為"包路徑全名.CustomApplication"

註:CustomApplication為主進程,單例。當App被創建的時候就會被創建,有且只有一個。
那麼就可以在onCreate()方法中做一些初始化的工作,比如說初始化某些框架、全局變數等等

7. android pageradapter destroyitem方法過期,不能重載怎麼辦

在一個 Android
應用中,我使用 FragmentPagerAdapter 來處理多 Fragment
頁面的橫向滑動。不過我碰到了一個問題,即當 Fragment 對應的數據集發生改變時,我希望能夠通過調用 mAdapter.notifyDataSetChanged() 來觸發 Fragment
頁面使用新的數據調整或重新生成其內容,可是當我調用 notifyDataSetChanged() 後,發現什麼都沒發生。搜索之後發現不止我一個人碰到這個問題,大家給出的解決辦法五花八門,有些確實解決了問題,但是我總感覺問題沒搞清楚。於是我決定搞明白這個問題到底是怎麼回事,以及正確的用法到底如何。要搞明白這個問題,僅僅閱讀文檔並不足夠,還需要閱讀相關幾個類的相關方法的實現,搞懂其設計意圖。下面就是通過閱讀源代碼搞明白的內容。

【ViewPager】ViewPager 如其名所述,是負責翻頁的一個
View。准確說是一個 ViewGroup,包含多個 View
頁,在手指橫向滑動屏幕時,其負責對 View 進行切換。為了生成這些
View 頁,需要提供一個 PagerAdapter 來進行和數據綁定以及生成最終的 View 頁。setAdapter()

ViewPager 通過
setAdapter() 來建立與 PagerAdapter 的聯系。這個聯系是雙向的,一方面,ViewPager 會擁有 PagerAdapter 對象,從而可以在需要時調用
PagerAdapter 的方法;另一方面,ViewPager 會在
setAdapter() 中調用 PagerAdapter 的 registerDataSetObserver() 方法,注冊一個自己生成的 PagerObserver 對象,從而在 PagerAdapter
有所需要時(如 notifyDataSetChanged() 或
notifyDataSetInvalidated() 時),可以調用
Observer 的 onChanged() 或
onInvalidated() 方法,從而實現 PagerAdapter 向 ViewPager
方向發送信息。

dataSetChanged()

在 PagerObserver.onChanged(),以及
PagerObserver.onInvalide() 中被調用。因此當
PagerAdapter.notifyDataSetChanged() 被觸發時,ViewPager.dataSetChanged() 也可以被觸發。該函數將使用 getItemPosition() 的返回值來進行判斷,如果為
POSITION_UNCHANGED,則什麼都不做;如果為
POSITION_NONE,則調用 PagerAdapter.destroyItem() 來去掉該對象,並設置為需要刷新 (needPopulate = true)
以便觸發 PagerAdapter.instantiateItem() 來生成新的對象。【PagerAdapter】PageAdapter 是 ViewPager
的支持者,ViewPager 將調用它來取得所需顯示的頁,而 PageAdapter 也會在數據變化時,通知
ViewPager。這個類也是FragmentPagerAdapter 以及 FragmentStatePagerAdapter 的基類。如果繼承自該類,至少需要實現 instantiateItem(), destroyItem(), getCount()
以及 isViewFromObject()。getItemPosition()

該函數用以返回給定對象的位置,給定對象是由 instantiateItem() 的返回值。


ViewPager.dataSetChanged() 中將對該函數的返回值進行判斷,以決定是否最終觸發 PagerAdapter.instantiateItem() 函數。

在 PagerAdapter
中的實現是直接傳回 POSITION_UNCHANGED。如果該函數不被重載,則會一直返回 POSITION_UNCHANGED,從而導致
ViewPager.dataSetChanged() 被調用時,認為不必觸發
PagerAdapter.instantiateItem()。很多人因為沒有重載該函數,而導致調用
PagerAdapter.notifyDataSetChanged()
後,什麼都沒有發生。

instantiateItem()

在每次 ViewPager
需要一個用以顯示的 Object 的時候,該函數都會被
ViewPager.addNewItem() 調用。

notifyDataSetChanged()

在數據集發生變化的時候,一般
Activity 會調用 PagerAdapter.notifyDataSetChanged(),以通知
PagerAdapter,而 PagerAdapter 則會通知在自己這里注冊過的所有 DataSetObserver。其中之一就是在
ViewPager.setAdapter() 中注冊過的 PageObserver。PageObserver
則進而調用 ViewPager.dataSetChanged(),從而導致
ViewPager 開始觸發更新其內含 View 的操作。【FragmentPagerAdapter】FragmentPagerAdapter 繼承自
PagerAdapter。相比通用的 PagerAdapter,該類更專注於每一頁均為
Fragment 的情況。如文檔所述,該類內的每一個生成的 Fragment 都將保存在內存之中,因此適用於那些相對靜態的頁,數量也比較少的那種;如果需要處理有很多頁,並且數據動態性較大、佔用內存較多的情況,應該使用FragmentStatePagerAdapter。FragmentPagerAdapter 重載實現了幾個必須的函數,因此來自 PagerAdapter 的函數,我們只需要實現
getCount(),即可。且,由於 FragmentPagerAdapter.instantiateItem()
的實現中,調用了一個新增的虛函數 getItem(),因此,我們還至少需要實現一個 getItem()。因此,總體上來說,相對於繼承自 PagerAdapter,更方便一些。getItem()

該類中新增的一個虛函數。函數的目的為生成新的 Fragment 對象。重載該函數時需要注意這一點。在需要時,該函數將被 instantiateItem() 所調用。

如果需要向 Fragment
對象傳遞相對靜態的數據時,我們一般通過 Fragment.setArguments() 來進行,這部分代碼應當放到
getItem()。它們只會在新生成 Fragment 對象時執行一遍。

如果需要在生成
Fragment 對象後,將數據集裡面一些動態的數據傳遞給該 Fragment,那麼,這部分代碼不適合放到
getItem() 中。因為當數據集發生變化時,往往對應的 Fragment 已經生成,如果傳遞數據部分代碼放到了 getItem() 中,這部分代碼將不會被調用。這也是為什麼很多人發現調用 PagerAdapter.notifyDataSetChanged() 後,getItem()
沒有被調用的一個原因。

instantiateItem()

函數中判斷一下要生成的 Fragment 是否已經生成過了,如果生成過了,就使用舊的,舊的將被 Fragment.attach();如果沒有,就調用 getItem() 生成一個新的,新的對象將被 FragmentTransation.add()。

FragmentPagerAdapter 會將所有生成的
Fragment 對象通過 FragmentManager 保存起來備用,以後需要該
Fragment 時,都會從 FragmentManager 讀取,而不會再次調用 getItem() 方法。

如果需要在生成
Fragment 對象後,將數據集中的一些數據傳遞給該 Fragment,這部分代碼應該放到這個函數的重載里。在我們繼承的子類中,重載該函數,並調用 FragmentPagerAdapter.instantiateItem()
取得該函數返回 Fragment 對象,然後,我們該
Fragment 對象中對應的方法,將數據傳遞過去,然後返回該對象。

否則,如果將這部分傳遞數據的代碼放到 getItem()中,在
PagerAdapter.notifyDataSetChanged() 後,這部分數據設置代碼將不會被調用。

destroyItem()

該函數被調用後,會對
Fragment 進行 FragmentTransaction.detach()。這里不是
remove(),只是 detach(),因此 Fragment
還在 FragmentManager 管理中,Fragment
所佔用的資源不會被釋放。【FragmentStatePagerAdapter】

FragmentStatePagerAdapter 和前面的
FragmentPagerAdapter 一樣,是繼承子 PagerAdapter。但是,和
FragmentPagerAdapter 不一樣的是,正如其類名中的
'State' 所表明的含義一樣,該 PagerAdapter 的實現將只保留當前頁面,當頁面離開視線後,就會被消除,釋放其資源;而在頁面需要顯示時,生成新的頁面(就像 ListView
的實現一樣)。這么實現的好處就是當擁有大量的頁面時,不必在內存中佔用大量的內存。getItem()

一個該類中新增的虛函數。

函數的目的為生成新的 Fragment 對象。

Fragment.setArguments() 這種只會在新建
Fragment 時執行一次的參數傳遞代碼,可以放在這里。

由於
FragmentStatePagerAdapter.instantiateItem() 在大多數情況下,都將調用
getItem() 來生成新的對象,因此如果在該函數中放置與數據集相關的 setter 代碼,基本上都可以在
instantiateItem() 被調用時執行,但這和設計意圖不符。畢竟還有部分可能是不會調用 getItem() 的。因此這部分代碼應該放到
instantiateItem() 中。

instantiateItem()

除非碰到
FragmentManager 剛好從 SavedState 中恢復了對應的
Fragment 的情況外,該函數將會調用 getItem() 函數,生成新的
Fragment 對象。新的對象將被 FragmentTransaction.add()。

FragmentStatePagerAdapter 就是通過這種方式,每次都創建一個新的 Fragment,而在不用後就立刻釋放其資源,來達到節省內存佔用的目的的。

destroyItem()

將 Fragment
移除,即調用 FragmentTransaction.remove(),並釋放其資源。

8. 怎麼用androidstudio快速重寫函數

用androidstudio快速重寫函數方法:
右擊----Generate---Override Method---選擇要重載的函數。

9. Android:我照網上寫的Fragment案例,為什麼我的會顯示沒有這個方法的重載如圖

應該是v4包的問題,因為你的FragmentManager繼承的是android.support.v4.app.FragmentManager,所以你的MyFragment也需要繼承相應的android.support.v4.app.Fragment,而不是默認的Fragment

話說這種問題推薦去專門的論壇問,學術氛圍好。
我感覺知道平台對我們這些回答者不算友好

10. Android中為什麼可以new Runnable

類似Thread類,重載run方法。
Runnable mRunnable = new Runnable() {

public void run() {

//自定義功能
}

};

然後一般通過Handler,發送到消息隊列裡面去運行,
如 Handler mHandler = new Handler();
mHandler.post(mRunnable);
mHandler.postDelayed (mRunnable);
一些原型如下:

public final boolean post(Runnable r)
{
return sendMessageDelayed(getPostMessage(r), 0);
}

public final boolean postDelayed(Runnable r, long delayMillis)
{
return sendMessageDelayed(getPostMessage(r), delayMillis);
}

public final boolean postAtTime(Runnable r, Object token, long uptimeMillis)
{
return sendMessageAtTime(getPostMessage(r, token), uptimeMillis);
}

熱點內容
群九軸演算法 發布:2025-03-04 07:45:13 瀏覽:166
c語言企業面試題目 發布:2025-03-04 07:45:03 瀏覽:406
e付卡怎麼設置密碼 發布:2025-03-04 07:44:59 瀏覽:89
安卓在手機桌面移除app後如何恢復 發布:2025-03-04 07:26:15 瀏覽:103
開發者隱私密碼如何關閉 發布:2025-03-04 07:21:35 瀏覽:337
neta解壓 發布:2025-03-04 06:57:23 瀏覽:978
安卓啟動界面是什麼意思 發布:2025-03-04 06:31:48 瀏覽:529
安卓智能鎖屏怎麼設置時間設置 發布:2025-03-04 06:31:39 瀏覽:235
C語言程式 發布:2025-03-04 06:30:57 瀏覽:703
建設銀行存儲介質 發布:2025-03-04 06:30:21 瀏覽:782