首頁>Program>source

在我的android專案中,我有ImageAdapter類,可以在其中傳遞應用上下文以满足进一步的需求。

public class ImageAdapter extends BaseAdapter {
    private Context c;
    public ImageAdapter(Context c) {
            this.c = c;
    }
    ...
}

問题是我想將ImageAdapter作為一个單例,以便可以从我的所有活動中轻松訪問此類的例項.但是我不知道如何將我的活動之一中的getApplicationContext()方法中的應用程式上下文傳遞给ImageAdapter.那麼,有什麼"魔術"可以做到這一點?

public class ImageAdapter extends BaseAdapter {
    private Context c;
    private static class Holder {
            public static final ImageAdapter IA = new ImageAdapter();
    }
    private ImageAdapter() {
            this.c = /* some magic here */.getApplicationContext();
    }
    public static ImageAdapter getInstance() {
            return Holder.IA;
    }
    ...
}

也许您還有其他一些想法可以共享ImageAdapter用於我的任何活動。 我是android的新手,我對在活動之間傳遞資料的方式有些困惑。

我將感谢您的帮助。

最新回復
  • 5月前
    1 #

    Update: 06-Mar-18

    使用 MyApplication 例項而不是 Context 例項. Application 例項是一个單例上下文例項本身。

    public class MyApplication extends Application {
        private static MyApplication mContext;
        @Override
        public void onCreate() {
            super.onCreate();
            mContext = this;
        }
        public static MyApplication getContext() {
            return mContext;
        }
    }
    

    Previous Answer

    您可以像這樣获得應用程式上下文:

    public class MyApplication extends Application {
        private static Context mContext;
        @Override
        public void onCreate() {
            super.onCreate();
            mContext = getApplicationContext();
        }
        public static Context getContext() {
            return mContext;
        }
    }
    

    然後,您可以从 MyApplication.getContext()方法呼叫應用程式上下文

    別忘了在清單檔案中宣告應用程式:

    <application
        android:name=".MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
    

  • 5月前
    2 #

    我宁愿將上下文例項作為引數傳遞给真正需要它的單例中的每个方法

  • 5月前
    3 #

    APPROACH#1:

    由於您指定ImageAdapter為單例,因此一个簡單的答案是从可以訪問應用上下文的類建立该單例:

    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            ImageAdapter.createIt(this);
        }
    }
    public class ImageAdapter extends BaseAdapter {
        private static ImageAdapter it;
        // Get the singleton.
        public static ImageAdapter getIt() {
            return it;
        }
        // Call this once, to create the singleton.
        public static void createIt(Context context) {
            it = new ImageAdapter(context);
        }
        private final Context c;
        private ImageAdapter(Context context) {
            c = context;
        }
    }
    

    方法2:

    如果不是單例,那麼我將使用公认的答案.在這種情况下,請从ImageAdapter中删除區域性變數,因為始终可以从MyApplication获取上下文.擴充套件接受的答案,如果希望方便使用本地方法,請定義ImageAdapter.getContext().完整的解決方案:

    public class MyApplication extends Application {
        private static Context appContext;
        public static Context getContext() {
            return appContext;
        }
        @Override
        public void onCreate() {
            super.onCreate();
            appContext = this;
        }
    }
    public class ImageAdapter extends BaseAdapter {
        public ImageAdapter() {
        }
        // [Optional] Call this whenever you want the app context.
        private Context getContext() {
            return MyApplication.getContext();
        }
    }
    

  • 如何使用Python解析錯誤的JSON?
  • c++:移出的向量始终為空吗?