首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用FragmentActivity中的事件侦听器实现android应用程序类中的侦听器

使用FragmentActivity中的事件侦听器实现android应用程序类中的侦听器
EN

Stack Overflow用户
提问于 2013-03-29 19:28:51
回答 1查看 4.8K关注 0票数 4

刚刚开始编程,我正在编写我的第一个应用程序。我为这事绞尽脑汁已经够久了。我从教程中学到了这一点,在教程中,侦听器在ListFragment中实现,而事件侦听器在托管ListFragment的FragmentActivity中。下面是示例中的示例(仅显示相关部分):

MyList类:

代码语言:javascript
运行
复制
public class MyList extends ListFragment{

   OnSomeItemSelectedListener mCallback;

   public interface OnSomeItemSelectedListener {
      public void onSomeItemSelectedListener(int position, long id);
    }

   @Override
   public void onAttach(Activity activity) {
      super.onAttach(activity);
      // This makes sure that the container activity has implemented
      // the callback interface. If not, it throws an exception.
      try {
         mCallback = (OnSomeItemSelectedListener) activity;
      } catch (ClassCastException e) {
         throw new ClassCastException(activity.toString()
         + " must implement OnSomeItemSelectedListener");
      }
   }

   @Override
   public void onListItemClick(ListView l, View v, int position, long id) {
      super.onListItemClick(l, v, position, id);
      mCallback.onSomeItemSelectedListener(position, id);
   }
}

MainActivity类:

代码语言:javascript
运行
复制
public class MainActivity extends FragmentActivity implements
        MyList.OnSomeItemSelectedListener{

    @Override
    public void onSomeItemSelectedListener(int position, long id) {
       //some stuff done here when clicked on a item from the listfragment
    }
}

上面的工作是完美的。

我正在尝试在一个应用程序类中实现这一点,以便在AsyncTask完成时通知事件侦听器(一个FragmentActivity)。这是我在应用程序类中所做的:

MyApplication类:

代码语言:javascript
运行
复制
public class MyApplication extends Application {

    OnFetchCompleteListener mCallback;

    public interface OnFetchCompleteListener {
        public void onFetchCompleteListener();
    }

    public synchronized void fetchUpdates() {
        String[] mURLs = getURLs();
        new DownloadDataAsyncTask().execute(mURLs[0], mURLs[1]);
    }

    private class DownloadDataAsyncTask extends
            AsyncTask<String, Void, JSONObject[]> {

        @Override
        protected JSONObject[] doInBackground(String... params) {
            //Some stuff
            return mJSON;
        }

        @Override
        protected void onPostExecute(JSONObject[] result) {
            // Informing listeners on fetchData complete
            mCallback.onFetchCompleteListener();
        }
    }
}

如何在应用程序类中实例化mCallback?如果没有这个,

代码语言:javascript
运行
复制
   mCallback = (OnSomeItemSelectedListener) activity;

我从应用程序类得到一个空指针异常。

非常感谢

EN

Stack Overflow用户

回答已采纳

发布于 2013-03-29 19:43:23

我认为您可以从Activity而不是从应用程序实例化mCallback。

在活动的onCreate()或onResume()方法中,您可以编写:

代码语言:javascript
运行
复制
MyApplication myApplication = getApplication();
myApplicaton.mCallback = this;

但是要确保您的活动实现了OnFetchCompleteListener (我不知道您为什么要在最后一段代码中键入OnSomeItemSelectedListener )。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15702308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档