Android:从单独的类文件中调用AsyncTask内部类

时间:2012-07-19 14:01:56

标签: java android android-asynctask inner-classes

我有一个Class:TabsPagerFragmentActivity,它托管所有标签。

然后我有一个单独的类:ShopsFragment,它有一个扩展AsyncTask的内部类

我正在尝试从TabsPagerFragmentActivity调用此内部类的.execute方法但是我得到了

 No enclosing instance of the type is accessible error.

有没有办法从TabsPagerFragmentActivity调用此内部类执行? 基本上我只是在用户离开这个片段时尝试更改图像。

代码:

public class AlternateImageView extends AsyncTask<String,Integer,Void>{

        @Override
        protected Void doInBackground(String... params) {

            return null;
        }

        @Override 
        protected void onProgressUpdate(Integer... progress) {

        }

        @Override
        protected void onPostExecute(Void v) {
                       //Do something 
                }
         }

由于

4 个答案:

答案 0 :(得分:1)

这样的东西?

AlternateImageView alternateImageView = new TabsPagerFragmentActivity().new AlternateImageView();
alternateImageView.execute();

我想补充一点,我不打算将此判断作为一个好主意或坏主意。

答案 1 :(得分:1)

这是如何声明你的内部类:

public class AlternateImageView extends AsyncTask<String,Integer,Void>

要从其他类文件中使用此类,您需要添加单词static,如下所示:

public static class AlternateImageView extends AsyncTask<String,Integer,Void>

然后你可以像这样使用你的课程:

AlternateImageView task = new TabsPagerFragmentActivity.AlternateImageView();
task.execute();

答案 2 :(得分:1)

更改

public class 

public static class

答案 3 :(得分:0)

将AsyncTask声明为静态类。静态内部类使得类在包的顶层与其他类的相同可见性处理,但是您可以获得将其作为内部类的组织好处。例如:

Class1
Class2
Class3
    >Inner1
Class4

要调用Inner1,您需要执行new Class3().new Inner1()。如果你像这样使它静止:

Class1
Class2
Class3
    >static Inner1
Class4

然后你可以像创建new Inner1()

这样的包中的任何其他类一样创建它