interface-在 fragment 如何实例化接口?

问题描述

在 fragment 如何实例化接口?

android 程序中,在一个 fragment activity 中有一个 progressbar。当任何 fragment 调用接口时,这个 progress bar 就会设置为可见的。

public class MainScreen extends FragmentActivity {
        public interface OnConnectingToInternet {
        public void showProgressbar(boolean flag);
    }

    // rest of codes
    .
    .
    .
      // Implementing Interface
    public void showProgressbar(boolean flag) {
        if(flag){
            myProgressbar.showProgressBar();
        } else {
            myProgressbar.hideProgressBar();
        }
    }
}

每一个fragment应该连接网络获取数据,但是在这之前要调用接口。其中一个fragment的代码如下:

public class TopRecipesFragment extends Fragment {
    private OnConnectingToInternet onConnectingToInternet;
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        // onConnectingToInternet = (OnConnectingToInternet) activity;
        Log.i(TAG, "Fragment attached to activity.");
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        New MyAsyncTask.execute();
    }
    public class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
        @Override
            protected void onPreExecute() {
            Log.i(TAG, "myAsyncTask is about to start...");
            onConnectingToInternet.showProgressbar(true);
            }
        @Override
            protected Boolean doInBackground(Void... params) {
            ...
            }

        @Override
            protected void onPostExecute(Boolean result) {
            Log.i(TAG, "myAsyncTask is about to start...");

            onConnectingToInternet.showProgressbar(false);
            }
}

问题是我不知道如何实例化这个接口。如果我不加入这行:onConnectingToInternet = (OnConnectingToInternet) activity; 然后运行程序时,就会出错NullPointerException

但是,如果我这样实例化,然后程序就崩溃。我用通常的做法也不行:onConnectingToInternet = new MainScreen();
如何解决这个问题呢?

解决方案

直接让TopRecipesFragment实现OnConnectingToInternet这个接口

解决方案二:

Fragment 里面有个getActivity()方法,可以试试

解决方案三:

public class MainScreen extends FragmentActivity {
private OnConnectingToInternet onConnectingToInternet ;
@Override
public void onAttach(Activity activity) {
try {
mCallback = (onConnectingToInternet) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnResolveTelsCompletedListener");
}
super.onAttach(activity);
}
public interface OnConnectingToInternet {
public void showProgressbar(boolean flag);
}

时间: 2024-09-24 01:09:18

interface-在 fragment 如何实例化接口?的相关文章

安卓开发-在fragment中实例化一个布局,点击其他fragment后再点击回来报错

问题描述 在fragment中实例化一个布局,点击其他fragment后再点击回来报错 10-20 04:24:35.864: E/AndroidRuntime(1390): FATAL EXCEPTION: main 10-20 04:24:35.864: E/AndroidRuntime(1390): Process: com.example.navigationdrawertest, PID: 1390 10-20 04:24:35.864: E/AndroidRuntime(1390):

C#如何通过反射来实例化接口

问题描述 我有一个接口,然后一个基类继承了该接口,又有儿子类继承了这个基类,还有孙子类继承了儿子类.根据特殊的业务,现在得到了孙子类,强制转换为该接口,做了业务处理后,分发到另外一个地方,如何再通过孙子类的类名,强制转换该接口为孙子类?此时孙子类的实例已经没有了,但是知道类的全名.说得比较绕,其实意思比较清楚.请大家赐教,谢谢 解决方案 解决方案二:如何"分发"?这里很含糊.许多所谓的分发,可能丢掉了(除你的接口声明以外的许多)属性.如果没有丢掉,那么在另一边你只要获取"孙子

javascript中Interface接口用法

但是JavaScript中没有相应的机制,但是Javascript很灵活,我们可以用它的特性去模仿Interface,但是我们需要加入一些methods来做check的动作 我们还是可以使用程序来模拟JavaScript Interface接口的实现.一般来说,模拟Interface的实现有如下三种方法: 1.注释法--将接口的定义写在注释中,大家能否小心注意,以实现接口的所有方法全凭自觉 2.属性检查法--自己说明我实现了哪些接口,一会儿你检查的时候记得检查我说我实现的接口里面,是否把我真正想

详解Android开发中Fragment的使用_java

前言学习Java和Android将近一年的时间了,期间的成果应该就是独立完成了一个Android客户端,并且保证了其在主线版本的稳定性.期间遇到了很多坑,也跟着师兄学到了很多Android知识.但是人总是要拥抱变化,不能让自己太安逸,虽然有不舍,但是我已经证明了自己的学习能力,下一步就是开始做Rom Porting了.这里总结一下之前项目中用到最多的Fragment. Fragment简介Fragment可以理解成Activity中用户界面的一个行为或者一部分,它必须被嵌套在Activity中.

Java接口回调是个什么玩意儿

java的接口回调,在android下用的是越来越多了,到底该怎么理解他呢? 回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 如何定义一个回调 a. 定义接口 : 在类中定义一个Interface, 并在接口中定义一个抽象方法;b. 接口对象 : 在类中定义一个该接口的成员变量;c. 设置对象 : 在类中定义一个公共的方法, 可以设置这个接口的对象, 调用该方法给接口对象成员变量赋值;d.

基于C#的接口基础教程之一

第一节 接口慨述 接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).接口可以从多个基接口继承,而类或结构可以实现多个接口.接口可以包含方法.属性.事件和索引器.接口本身不提供它所定义的成员的实现.接口只指定实现该接口的类或接口必须提供的成员. 接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用.接口不能被实例化.类可以实现多个接口并且通过这些实现的接口被索引.

PHP接口

什么是接口?接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来. 接口是更加抽象的抽象类,抽象类里的方法可以有方法体,而接口里的所有方法都没有方法体.接口体现了程序设计的多态和高内聚低偶拿来设计思想. 1.接口的基本语法 interface 接口名( //属性 //方法 } 例: <?php //使用程序模拟现实生活中的USB接口 //接口一般用于定义规范(方法/属性) interface iUsb{ public function start();

C#语法练习(15): 接口

接口只声明.无实现.不能实例化; 接口可包含方法.属性.事件.索引器, 但无字段; 接口成员都是隐式的 public, 不要使用访问修饰符; 类.结构和接口都可以继承多个接口; 继承接口的类必须实现接口成员, 除非是抽象类; 类实现的接口成员须是公共的.非静态的. 入门示例: using System; interface MyInterface { int Sqr(int x); } class MyClass : MyInterface { public int Sqr(int x) { r

实例讲解Java中的接口的作用

接口的作用 接口的作用简单一点就是:接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了,接口体现了抽象的观点,什么是抽象?抽象就是"抽去像的部分". 使用接口解决问题 问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据用户使用的数据库决定使用具体的类. 好的,我们看看这样有什么不好之处: (1).首先每个类都要有重复的代