当前位置:首页 » 安卓系统 » 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);
}

热点内容
c语言scanf的意思 发布:2025-03-04 12:08:31 浏览:465
两端存储器 发布:2025-03-04 12:07:49 浏览:83
安卓手机连不上无线网什么原因 发布:2025-03-04 12:03:29 浏览:88
串口缓存区 发布:2025-03-04 11:59:12 浏览:579
php抓取链接 发布:2025-03-04 11:59:11 浏览:986
涡轮降温用什么服务器 发布:2025-03-04 11:55:30 浏览:336
齿轮ftp 发布:2025-03-04 11:40:46 浏览:395
创建数据访问页 发布:2025-03-04 11:32:41 浏览:774
sql添加语句字段 发布:2025-03-04 11:32:41 浏览:363
如何把别人制作的游戏导入编译器 发布:2025-03-04 11:32:41 浏览:492