Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Daniele Futtorovic Newsgroups: comp.lang.java.programmer Subject: Re: Initializing from context passing Date: Sat, 23 Apr 2011 21:47:05 +0200 Organization: A noiseless patient Spider Lines: 100 Message-ID: References: <91ga4tF38vU1@mid.individual.net> <91gj4cF34fU1@mid.individual.net> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 23 Apr 2011 19:47:05 +0000 (UTC) Injection-Info: mx03.eternal-september.org; posting-host="c5NCuBx/rO/OU6n3p+JXTg"; logging-data="6179"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19AxtVscI/QmvdFmXpnECYi" User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.15) Gecko/20110303 Thunderbird/3.1.9 In-Reply-To: <91gj4cF34fU1@mid.individual.net> Cancel-Lock: sha1:ULpuVIkjoCKlSC7h+aik4Fvt7As= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:3222 On 23/04/2011 20:12, Dirk Bruere at NeoPax allegedly wrote: > On 23/04/2011 17:35, Daniele Futtorovic wrote: >> On 23/04/2011 17:39, Dirk Bruere at NeoPax allegedly wrote: >>> I have a Data class of the form: >>> >>> Data >>> ( >>> public static ListView albumsLV; >>> public static ArrayAdapter albumsTitleAdapter >>> public static ArrayList albumsTitleArrayList = new >>> ArrayList(); >>> >>> Data(Context ctx) >>> { >>> albumsLV = (ListView )((Activity) >>> ctx).findViewById(R.id.ListViewAlbums); >>> >>> albumsTitleAdapter = new ArrayAdapter(ctx, >>> android.R.layout.simple_expandable_list_item_1,albumsTitleArrayList); >>> } >>> >>> } >>> >>> and in the main method{ >>> >>> public void onCreate(Bundle savedInstanceState) >>> { >>> super.onCreate(savedInstanceState); >>> setContentView(R.layout.main); >>> Context currentContext = this; >>> >>> Data data = new Data(currentContext); >>> >>> } >>> >>> lvAlbum = (ListView)findViewById(R.id.ListViewAlbums); >>> lvAlbum.setAdapter(Data.albumsTitleAdapter); >>> } >>> >>> I never use Data data variable again. >>> Is that sufficient to initialize the static parameters in Data class? >>> >> >> Yeah, but it's crap. At least make it a static method e.g. >> Data.init(Context). > > So do not do it in the constructor? /Where/ you do it isn't as much the point as whether you do it statically or not. If your data is of static nature (i.e. bound to the program, global, rather than bound to a context), then it is wrong to initialise it through an instance. Of course, you might also do this... ############################################## private static volatile Data singleton; public static void init( Context context ) throws InitialisationException { singleton = new Data( context ); } public static Data getSharedInstance(){ if( singleton == null ) throw new IllegalStateException("not initialised"); return singleton; } private final ListView albumsLV; private final ArrayAdapter albumsTitleAdapter private final List albumsTitleArrayList = new ArrayList(); Data(Context ctx) throws InitialisationException { albumsLV = (ListView )((Activity) ctx).findViewById(R.id.ListViewAlbums); albumsTitleAdapter = new ArrayAdapter(ctx, android.R.layout.simple_expandable_list_item_1,albumsTitleArrayList); } public ListView getAlbumsLV(){ return albumsLV; } public ArrayAdapter getAlbumsTitleAdapter(){ return albumsTitleAdapter; } public List getAlbumsTitleList(){ return albumsTitleArrayList; } } ############################################## ... and your initialisation would happen in a constructor, be bound to an instance and that would be fine. But still you'd access it statically, therefore it's static data. And static data ought to be initialised statically. -- DF. An escaped convict once said to me: "Alcatraz is the place to be"