首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

返回super.onOptionsItemSelected(item);未调用父方法

在Android开发中,onOptionsItemSelected(item)Activity 类中的一个方法,用于处理选项菜单项的点击事件。如果你在这个方法中返回了 super.onOptionsItemSelected(item),但实际上父类的方法并没有被调用,这通常是由于以下几个原因:

原因分析

  1. 方法覆盖不正确:确保你正确地覆盖了 onOptionsItemSelected 方法,并且使用了正确的访问修饰符(通常是 public)。
  2. 逻辑错误:在 onOptionsItemSelected 方法中,可能存在某些逻辑导致 super.onOptionsItemSelected(item) 没有被执行。例如,如果方法中有 return 语句在调用 super.onOptionsItemSelected(item) 之前,那么父类的方法将不会被调用。
  3. 菜单未正确创建:确保你的选项菜单已经正确创建,并且在 onCreateOptionsMenu(Menu menu) 方法中返回了 true

解决方法

  1. 检查方法覆盖: 确保你的 onOptionsItemSelected 方法正确覆盖了父类的方法。
  2. 检查方法覆盖: 确保你的 onOptionsItemSelected 方法正确覆盖了父类的方法。
  3. 检查逻辑错误: 确保在调用 super.onOptionsItemSelected(item) 之前没有 return 语句。
  4. 检查逻辑错误: 确保在调用 super.onOptionsItemSelected(item) 之前没有 return 语句。
  5. 确保菜单正确创建: 确保 onCreateOptionsMenu(Menu menu) 方法返回 true
  6. 确保菜单正确创建: 确保 onCreateOptionsMenu(Menu menu) 方法返回 true

示例代码

以下是一个完整的示例,展示了如何正确覆盖 onOptionsItemSelected 方法并确保父类方法被调用。

代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            // 处理设置项点击事件
            Toast.makeText(this, "Settings clicked", Toast.LENGTH_SHORT).show();
        }
        // 确保在所有逻辑之后调用 super.onOptionsItemSelected(item)
        return super.onOptionsItemSelected(item);
    }
}

参考链接

通过以上步骤,你应该能够确保 super.onOptionsItemSelected(item) 被正确调用,并且父类的方法能够执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • python之类的重写方法调用方法

    下面我们来介绍一下python的类的重写方法调用方法。...---- 二、重写方法调用方法   在继承关系中,子类会自动继承类中定义的方法,但如果类中的方法功能不能满足需求,就可以在子类中重写类的方法。...2.子类调用方法   如果需要在子类中调用类的方法,可以使用内置函数super()或通过“类名.方法名()”的方式来实现。 例:子类调用类的方法示例。...__init__(name, sex) #调用类中的__init__方法 self.score = score #创建对象实例 student = Stu('Jack','Male...---- 三、参考 1、廖雪峰的官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python类的重写方法调用方法相关知识,可以参考一下,觉得不错的话

    2.7K30

    python调用方法的三种方式(super调用类名调用

    子类调用类的方法的三种方式:类名.方法名(self)super(子类名,self).方法名()super().方法名注意:super()通过子类调用当前类的方法,super默认会调用第一个类的方法...绑定方式使用super()函数,但如果涉及多继承,该函数只能调用第一个直接类的构造方法。...也就是说,涉及到多继承时,在子类构造函数中,调用第一个类构造方法的方式有以上两种,而调用其他类构造方法的方式只能使用绑定方法。...__init__(self, name)使用绑定方法调用第一个类的构造方法 #调用其他类的构造方法,需要手动给self传值 Animal....但是调用Animal类的构造方法,只能使用绑定方法

    1.1K20

    python中调用类同名方法

    实际项目操作中,由于类的继承导致可能覆盖同名的构造方法,导致只能使用子类的构造,而无法调用类的构造方法。但其实可以采用super方法解决这个问题,今天的课程就是用来解决这个问题的。...---- 本节知识视频教程 https://v.qq.com/x/page/y0911dr4dr1.html 文字讲解开始: 一、super函数 super()这个方法可以用来解决子类中调用类同名构造方法...super方法可以用在类中的任意的函数中,去调用类中的方法。 2. super方法也可以调用超类中的方法。...3.掌握super方法调用类中同名函数时的方法调用顺序,默认是优先调用类中的同名方法。...stu=Student("老刘") print(stu.getName()) stu.say() #调用类的类中的方法 runStu=RunStudent("刘金玉编程") runStu.walk

    3.1K10

    Python_子类调用类的方法

    1.方式一 子类调用类的方法,包含2中形式的调用。一种形式是在类内部通过继承的方式调用类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用类的方法。如下图所示: ?...#子类调用方法 Person.eat(self) #子类在调用方法必须要传self #实例化一个子类 student = Student("周明",23,'男',"11届土木...3班") #调用子类本身的方法 student.course() #通过子类调用类的方法--->实例化之后来调用类的方法 student.eat() #调用子类的方法,在子类方法调用了子类的方法,...#子类调用方法 super().eat() #子类在调用方法,使用super可以省略self #实例化一个子类 student = Student("周明",23,'男',..."11届土木3班") #调用子类本身的方法 student.course() #通过子类调用类的方法--->实例化之后来调用类的方法 student.eat() #调用子类的方法,在子类方法调用了子类的方法

    4.8K20

    Python类继承(调用类成员与方法

    python中类的初始化方法是__init__(),因此类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用类的初始化函数,如果子类实现这个函数,就覆盖了类的这个函数,既然继承类,就要在这个函数里显式调用一下类的...调用类函数有以下方法: Python class Animal():     def __init__(self, name):         self.name = name       def...).parent_attribute(arg) 【不需要写self】 3.在类定义中调用本类的方法,可以直接 super().parent_method(arg) 【个人推崇这种写法】 样例如下:...:         print ("I am "+ self.name + ", and I can bark")       def animal_say_1(self):         # 子类调用类的方法...    dog.saySomething()     dog.animal_say_1()     dog.animal_say_2()     dog.animal_say_3()     # 子类对象调用被覆盖的方法

    5.6K41
    领券